我已经尝试了一些列表,我想添加列表的其他部分。
说我有一个清单
[2,4,8,9,4,2]
我希望像
一样添加两个和两个[2+4,8+9,4+2] so I get the list [6,17,6]
即使列表长度不同,是否有可能这样做? (为了方便起见,我假设列表ALWAYS的数字是2的倍数,所以可以这样做)
我不确定我可以搜索什么来回答这个问题
答案 0 :(得分:6)
打破你的问题 - 你想做两件事:
第一个很容易用the grouper recipe from itertools:
实现def grouper(iterable, n, fillvalue=None):
"Collect data into fixed-length chunks or blocks"
# grouper('ABCDEFG', 3, 'x') --> ABC DEF Gxx"
args = [iter(iterable)] * n
return zip_longest(*args, fillvalue=fillvalue)
[sum(group) for group in grouper([2, 4, 8 ,9, 4, 2], 2)]
这种方法的主要优点是可以毫不费力地扩展到任何规模的组。如果你想对每组100个元素求和,它只是改变组的大小。
答案 1 :(得分:6)
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
答案 2 :(得分:2)
>>> L = [2, 4, 8, 9, 4, 2]
>>> from operator import add
>>> list(map(add, *[iter(L)]*2))
[6, 17, 6]
答案 3 :(得分:2)
不是很有创意,但一般的解决方案可以是这样的:
def get_chunk_sums(a, chunk_size):
return [sum(a[i: i+chunk_size]) for i in xrange(0, len(a), chunk_size)]
结果:
>>> get_chunk_sums([2,4,8,9,4,2], 2)
[6, 17, 6]
>>> get_chunk_sums([2,4,8,9,4,2], 3)
[14, 15]
答案 4 :(得分:1)
继续gnibbler's和arshajii's solution
>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]