我有一个清单:
mylist = [0.01, 0.09, 0.04, 0.16]
我想每两个元素取总和,所以我的结果是:
[0.1, 0.2]
我想到了这个解决方案:
chunks = [mylist[i:i + 2] for i in range(0, len(mylist), 2)]
temp = []
for i in chunks:
s = 0
for j in i:
s += j
temp.append(s)
print(temp)
[0.1, 0.2]
但我想知道是否有更好的解决方案,避免使用2 for循环。
答案 0 :(得分:8)
为什么不简单地使用sum(..)
内置:
temp = [sum(mylist[i:i+2]) for i in range(0, len(mylist), 2)]
这是一个单行,显然更像Pythonic。此外,它可能更有效,因为在这里你不会先将所有切片存储到内存中,等等,但你直接计算总和。
答案 1 :(得分:1)
map(sum, zip(mylist[::2], mylist[1::2]))
对于奇数长度的列表,请改用zip_longest
from itertools import zip_longest as zipl
map(sum, zipl(mylist[::2], mylist[1::2], fillvalue=0))
答案 2 :(得分:1)
有些人可能认为这是一种矫枉过正,但是一旦你对数字数组进行计算,numpy就是你的朋友。它使您能够以可读且高效的方式进行此类计算。
import numpy as np
x = np.array([0.01, 0.09, 0.04, 0.16])
# reshaping the array to a 2D array, and summing over the columns
x.reshape((x.shape[0]/2,2)).sum(axis=1)
答案 3 :(得分:1)
你可以尝试这个(对偶数和奇数都有效):
import itertools as it
[sum(r) for r in it.izip_longest(mylist [::2], mylist [1::2], fillvalue=0)]
答案 4 :(得分:1)
使用iteration_utilities.grouper
:
$(postcodeLinks[33]).html()
// or..
$(postcodeLinks[33]).text()
第一个值不是0.1是因为浮点运算,这里的其他解决方案同样受到影响。
这应该和其他方法一样快,甚至可能更快(除了numpy-solution)。