如果我有一个说[7,6,5,4,3,2,1]
的列表,我怎么能让它每隔一个数字添加一次upp,例如7 + 5 + 3 + 1
?
我尝试添加mylist[0] + mylist[2]
等,但这非常繁琐。
答案 0 :(得分:8)
sum(mylist[::2])
mylist[::2]
采用其他所有项目,sum
对其进行求和。
如果你想拥有第一,第三,第五等项目,你可以使用:
sum(list[1::2])
这将首先省略第一个项目(1
部分),然后执行与第一个命令相同的操作。
答案 1 :(得分:1)
如果您不想创建新列表,可以使用xrange添加每个偶数索引元素:
l = [7,6,5,4,3,2,1]
print(sum(l[i] for i in xrange(0, len(l), 2)))
或使用itertools.islice
:
sum(islice(l, 0, None, 2))
使用python2时,某些时间显示islice在时间和空间上获胜:
In [14]: timeit sum(islice(l, 0, None, 2))
10 loops, best of 3: 123 ms per loop
In [15]: timeit sum(l[i] for i in xrange(0,len(l), 2))
1 loops, best of 3: 363 ms per loop
In [16]: timeit sum(l[::2])
10 loops, best of 3: 148 ms per loop
他们都返回相同的结果:
In [21]: sum(islice(l, 0, None, 2))
Out[21]: 24999995000000
In [22]: sum(l[i] for i in xrange(0,len(l), 2))
Out[22]: 24999995000000
In [23]: sum(l[::2])
Out[23]: 24999995000000