Python:我可以在列表中添加其他所有整数吗?

时间:2013-07-19 01:41:09

标签: python python-3.x

我已经尝试了一些列表,我想添加列表的其他部分。

说我有一个清单

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

我希望像

一样添加两个和两个
[2+4,8+9,4+2] so I get the list [6,17,6]

即使列表长度不同,是否有可能这样做? (为了方便起见,我假设列表ALWAYS的数字是2的倍数,所以可以这样做)

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

5 个答案:

答案 0 :(得分:6)

打破你的问题 - 你想做两件事:

  1. 将您的列表拆分为成对(组)。
  2. 总结这些群体。
  3. 第一个很容易用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()list comprehension.

    [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'sarshajii'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]