2016-03-15 76 views
13

對列表中的每個第n個值執行算術運算的最Python方法是什麼?例如,如果我開始與列表1:編輯列表中每個第N個項目的值

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

我想1添加到每個第二個項目,這將使:

list2 = [1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 

我已經試過:

list1[::2]+1 

還有:

for x in list1: 
    x=2   
    list2 = list1[::x] + 1 

回答

16

你可以使用slicing與列表理解如下:

In [26]: list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 

In [27]: list1[1::2] = [x+1 for x in list1[1::2]] 

In [28]: list1 
Out[28]: [1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 
+0

我注意到很多人把他們的答案在這種格式。你如何產生這個? – Igor

+2

使用Enthought Canopy中的控制檯。你使用控制檯嗎? – gtlambert

+1

我在Notepad ++中編寫代碼,當我需要嘗試一些東西時,將只使用python命令行解釋器。我沒有在我編寫大部分代碼的機器上擁有管理員權限。控制檯和交互式解釋器有什麼不同(''>>>'') – Igor

4

使用enumeratelist comprehension

>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> [v+1 if i%2!=0 else v for i,v in enumerate(list1)] 
[1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 
3
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
for i in range(1, len(list1), 2): 
    list1[i] +=1 
print(list1) 

使用我%2似乎不是很有效

+1

20年前,'%'效率不高可能是正確的。在任何現代CPU上,它的速度都與其他基本的數學運算速度一樣快。 –

+0

'%2'對整型類型非常有效。對於不是兩個冪的因數,不是很多。 –

8

numpy允許你使用+=操作帶片:

In [15]: import numpy as np 

In [16]: l = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10]) 

In [17]: l[1::2] += 1 

In [18]: l 
Out[18]: array([ 1, 3, 3, 5, 5, 7, 7, 9, 9, 11]) 
1

試試這個:

list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
for i in range(1,len(list1),2): 
    list1[i] += 1 
+0

我會堅持我的脖子出來,說我喜歡這個答案切片。爲什麼?因爲它是一種極端Pythonic和非常強大的一般形式的實例:'對於我在生成器(args)中:' – nigel222

+3

似乎是10分鐘前發佈的Divisadero答案的完全重複。 –

1

您可以創建代表三角洲(itertools.cycle([0, 1])一個迭代,然後添加其內容到您現有的名單。

>>> list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
>>> [a + b for a,b in zip(list1, itertools.cycle([0,1]))] 
[1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 
>>> 
1
a = [i for i in range(1,11)] 
#a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
b = [a[i]+1 if i%2==1 else a[i] for i in range(len(a))] 
#b = [1, 3, 3, 5, 5, 7, 7, 9, 9, 11] 
+0

歡迎來到堆棧溢出!儘管這段代碼可以解決這個問題,但[包括解釋](http://meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers)確實有助於提高帖子的質量。請記住,您將來會爲讀者回答問題,而這些人可能不知道您的代碼建議的原因。 - [來自評論](https://stackoverflow.com/review/low-quality-posts/11679194) – Ferrybig

相關問題