-1

我已经对列表进行了一些实验,我想添加列表的所有其他部分。

说我有一个清单

[2,4,8,9,4,2]

我想把两个和两个加在一起

[2+4,8+9,4+2] so I get the list [6,17,6]

即使列表长度不同,是否有可能的方法来做到这一点?(为方便起见,我假设列表中的数字始终是 2 的倍数,因此可以这样做)

我不确定我可以搜索什么来回答这个问题

4

5 回答 5

6

分解你的问题——你想做两件事:

  1. 将您的列表分成对(组)。
  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()列表理解。

[sum(group) for group in grouper([2, 4, 8 ,9, 4, 2], 2)]

这种方法的主要优点是它可以毫不费力地扩展到任何规模的组。如果要对每组 100 个元素求和,只需更改组大小。

于 2013-07-19T01:46:38.990 回答
6
>>> l = [2,4,8,9,4,2]
>>> v = iter(l)
>>> [i + next(v) for i in v]
[6, 17, 6]
于 2013-07-19T01:47:14.463 回答
2
>>> L = [2, 4, 8, 9, 4, 2]
>>> from operator import add
>>> list(map(add, *[iter(L)]*2))
[6, 17, 6]
于 2013-07-19T01:47:18.430 回答
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]
于 2013-07-19T02:00:53.947 回答
1

推进gnibblerarshajii 的解决方案

>>> L = [2,4,8,9,4,2]
>>> [sum(i) for i in itertools.zip_longest(*[iter(L)]*2, fillvalue=0)]
[6, 17, 6]
于 2013-07-19T01:56:40.730 回答