如何将python列表中的第n个条目彼此添加?

时间:2018-10-21 20:36:39

标签: python list sum

假设我有一个python列表:

[4,5,25,60,19,2]

如何将第n个条目彼此添加?

例如我将列表分为3个条目[4,5 / 25,60 / 19,2],然后添加这些条目以获取新列表:

[4+25+19, 5+60+2]

那给我总和:

[48, 67]

对于一个更复杂的示例,假设我的列表中有2000个条目。我想将第100个条目添加到之前的条目中,因此在新列表中可以获得100个条目。现在,每个条目将是第100个条目的总和。

4 个答案:

答案 0 :(得分:4)

以迭代方式提取您的切片并将其汇总。

>>> [sum(l[i::2]) for i in range(len(l) // 3)]
[48, 67]

您可能需要做更多的工作来处理极端情况,但这对您来说是个不错的开始。

答案 1 :(得分:1)

itertools文档具有一个名为grouper的配方功能,您可以从more_itertools导入(需要手动安装)或复制粘贴它。

它是这样的:

>>> from more_itertools import grouper
>>> l = [4,5,25,60,19,2]
>>> list(grouper(2, l)) # 2 = len(l)/3
>>> [(4, 5), (25, 60), (19, 2)]

您可以将grouper的输出与zip进行转置,并将sum应用于每个组。

>>> [sum(g) for g in zip(*grouper(2, l))]
>>> [48, 67]

我更喜欢手动处理索引。此外,它还适用于所有可迭代的对象,而不仅仅是列表。通用迭代器可能不支持索引或切片,但始终能够产生值流。

答案 2 :(得分:0)

使用from herechunks函数,您可以编写以下内容:

def chunks(l, n):
    """Yield successive n-sized chunks from l."""
    for i in range(0, len(l), n):
        yield l[i:i + n]

l = [4,5,25,60,19,2]
print([sum(e) for e in list(chunks(l, 2))])

答案 3 :(得分:0)

也许可以使用一系列聪明的列表操作,但我想不到。因此,相反,我只是做了一个从0到n-1的解析器,并且在列表的范围内添加了元素,每n行一次。因此,如果n = 3,则取0、3、6等;否则,取0。然后1、4、7等-并将其放入输出列表。

代码附在下面。希望对您有所帮助。

list1 = [7, 6, -5.4, 6, -4, 55, -21, 45, 67, -9, -8, -7, 8, 9, 11, 110, -0.8, -9.8, 1.1]
n = 5

list2 = []
sum_elem = 0

for i in range(n):
    sum_elem = 0
    j = i

    while j < len( list1 ):
        sum_elem += list1[j]
        j += n

    list2.append(sum_elem)

print( list2 )