2016-03-15 90 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

相关问题