假设我有一个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个条目的总和。
答案 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 here的chunks
函数,您可以编写以下内容:
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 )