2011-04-28 41 views
2

一片更優雅的方式,我想一些組操作應用到列表的子集(片),並存儲在原始列表中的每個轉換的結果。用於更新給定一個列表的列表

我的背景是在阿達,這導致我做出以下錯誤:

Number_List = [0,1,2,3,4,5,6,7,8,9] 
for Index, Number in enumerate(Number_List[1:]): 
    Number_List[Index] = Number + 1 

給人一種新的Number_List:2,3,4,5,6,7,8,9,10,圖9和教我的陣列的片被重新索引爲0

我已經移動到以下內容,這是麻煩的,但功能。

Number_List = [0,1,2,3,4,5,6,7,8,9] 
for Index in range(1,len(Number_List)) 
    Number_List[Index] = Number_List[Index]+1 

我正在尋找一個更優雅的方式來做到這一點。

+0

謝謝你的代碼更新。我喜歡有'pythonic'標籤。 – Greg 2011-04-28 15:14:23

回答

8

enumerate需要start參數:

Number_List = [0,1,2,3,4,5,6,7,8,9] 
for Index, Number in enumerate(Number_List[1:], start=1): 
    Number_List[Index] = Number + 1 

你也可以寫

Number_List[1:] = [x+1 for x in Number_List[1:]] 
+0

我更喜歡第二個例子,但對於更復雜的操作,我可以看到它變得混亂。 – Greg 2011-04-28 15:16:36

1
from itertools import islice 
number_list[start:stop] = (x + 1 for x in islice(number_list, start, stop)) 

或者,使用number_list[start:stop]代替islice,但不必要創建另一個切片。這通過切片分配以任何方式更新列表,並避免顯式循環。

1

您可以使用列表理解和切片有很大的影響:

vals = range(10) #gives your example numbers 
vals[1:] = [v + 1 for v in vals[1:]] 
相關問題