2016-08-05 55 views
1

我已經搜索了關於如何做到這一點的相關線程,但我找不到任何東西。在Python中複製列表的一部分

我有一個數組:

x = [a,a,a,b,a,a] 

我想數組的元素複製到一個新的數組,直到我找到「B」。我試圖用循環做到這一點,但我得到一個錯誤,「y沒有定義」,我試圖初始化y,但也沒有工作。有任何想法嗎?我相信有更好的方法來做到這一點。

for ii in x: 
    if x[ii].find(num) == 0: 
     break 
    else: 
     y[ii] = x[ii] 
+1

你是什麼意思? 'X [II] .find(NUM)'?你有一個整數或字符串的列表? –

+0

對不起,我用整數作爲例子,它是一個字符串數組。固定。 – iheartcpp

回答

2
y = [] 
for e in x: 
    if e == 2: 
     break 
    y.append(e) 

+1

也稱爲'y = x [:x.index(2)]'。 – Mephy

+0

梅菲:是的。只是認爲作者需要一些簡單的實現。 –

+0

@IgorPomaranskiy除了_implementation_,一些_explanation_也將是不錯, –

2

你可以使用itertools.takewhile

>>> x = [1,1,1,2,1,1] 
>>> import itertools 
>>> y = list(itertools.takewhile(lambda i: i != 2, x)) 
>>> y 
[1, 1, 1] 

當使用一個循環,你必須使用y.append;如果你做y[ii] = ...,那麼當你嘗試設置例如你將會得到一個IndexError。具有零元素的數組的第一個元素。此外,當你循環這樣for ii in x:然後ii已經從x元素,即你要做x[ii]。在你的情況下,這並沒有例外,因爲x[1]將是x的有效元素,但它不會是你所期望的。

2

試試這個:

x = [1,1,1,2,1,1] 
b = 2 

try: 
    y = x[:x.index(b)] 
except ValueError: 
    y = x[:] 

例如:

In [10]: x = [1,1,1,2,1,1] 
    ...: b = 2 
    ...: 
    ...: try: 
    ...:  y = x[:x.index(b)] 
    ...: except ValueError: 
    ...:  # b was not found in x. Just copy the whole thing. 
    ...:  y = x[:] 
    ...: 

In [11]: y 
Out[11]: [1, 1, 1] 

list.index()shallow-copy slice以獲取更多信息。

1

的方式來獲得與generator expression做的事情:

x = ['a', 'a', 'a', 'b', 'a', 'a'] 
items = list(next(iter([])) if item == 'b' else item for item in x) 
print items 
['a', 'a', 'a'] 
+0

哇,使用'下一個(ITER([]))'觸發'StopIteration'在列表理解。我不確定我是否應該讚揚這一點,但肯定是一個創造性的解決方案。 ;-) –

+0

@tobias_k感謝,您的評論比upvoting更好))) –

+0

BTW,其實,這是一個生成器表達式,而不是一個列表理解。有了正確的列表理解,這是行不通的。 –

0

雖然它在某種程度上類似於威爾的答案,但在這裏它說明了如何使用slice內置切片對象:

>>> x = ['a','a','a','b','a','a'] 
>>> s = slice(x.index('b')) 
>>> 
>>> x[s] 
['a', 'a', 'a'] 
+0

你能不能也用這種方法與類型「字典」的對象? – iheartcpp

+0

您的意思是字典列表? –

0

我會按b索引分割數組:

>>> x = ['a','a','a','b','a','a'] 
>>> c = x.index('b') 
>>> x[:c] 
['a', 'a', 'a'] 
>>> x[c:] 
['b', 'a', 'a'] 
+0

雖然此代碼片段可能會解決問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。也請儘量不要使用解釋性註釋來擠佔代碼,因爲這會降低代碼和解釋的可讀性! –