我已经对列表进行了一些实验,我想添加列表的所有其他部分。
说我有一个清单
[2,4,8,9,4,2]
我想把两个和两个加在一起
[2+4,8+9,4+2] so I get the list [6,17,6]
即使列表长度不同,是否有可能的方法来做到这一点?(为方便起见,我假设列表中的数字始终是 2 的倍数,因此可以这样做)
我不确定我可以搜索什么来回答这个问题
我已经对列表进行了一些实验,我想添加列表的所有其他部分。
说我有一个清单
[2,4,8,9,4,2]
我想把两个和两个加在一起
[2+4,8+9,4+2] so I get the list [6,17,6]
即使列表长度不同,是否有可能的方法来做到这一点?(为方便起见,我假设列表中的数字始终是 2 的倍数,因此可以这样做)
我不确定我可以搜索什么来回答这个问题
分解你的问题——你想做两件事:
第一个很容易通过 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 个元素求和,只需更改组大小。
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
>>> L = [2, 4, 8, 9, 4, 2]
>>> from operator import add
>>> list(map(add, *[iter(L)]*2))
[6, 17, 6]
不是很有创意,但一般的解决方案可以是这样的:
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]
>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]