Python中0与0之间的列表元素总和
我有一份清单:Python中0与0之间的列表元素总和,python,list,Python,List,我有一份清单: lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7] 我需要一个新列表中0s之间元素的总和。 我试过了 但是它返回[11,0,0,0,57,0],而我期望 [11,0,0,57,0,8]只需在循环后添加一个额外的lst1。追加(summ) lst1 = [] summ = 0 for i, elem in enumerate(lst): if elem != 0: summ = summ + elem else:
lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
我需要一个新列表中0
s之间元素的总和。
我试过了
但是它返回[11,0,0,0,57,0]
,而我期望
[11,0,0,57,0,8]
只需在循环后添加一个额外的lst1。追加(summ)
lst1 = []
summ = 0
for i, elem in enumerate(lst):
if elem != 0:
summ = summ + elem
else:
if summ:
lst1.append(summ)
lst1.append(elem)
summ = 0
lst1.append(summ)
这里有一种方法可以通过阅读和理解列表来实现这一点。分组是通过检查元素是否为零来完成的,如果不是零,则对组中的所有项进行求和:
from itertools import groupby
lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
f = lambda x: x==0
result = [i for k, g in groupby(lst, f) for i in (g if k else (sum(g),))]
print(result)
# [11, 0, 0, 57, 0, 8]
当然,如果列表中的项目只是数字(为了避免泛化和引入潜规则),lambda
可以替换为bool
:
result = [i for k, g in groupby(lst, bool) for i in ((sum(g),) if k else g)]
当其为0时,您正在追加额外的sum,并且在末尾缺少1个sum
lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
lst1 = []
summ = 0
for i, elem in enumerate(lst):
if elem != 0:
summ = summ + elem
else:
if summ:
lst1.append(summ)
lst1.append(elem)
summ = 0
if summ:
lst1.append(summ)
# lst1 = [11, 0, 0, 57, 0, 8]
您的预期输出是什么。@YevhenKuzmovych
[11,0,0,57,0,8]
您想做什么?你的期望是什么?此代码按编写的方式工作。添加一个额外的lst1。在循环外追加(summ)
这不会产生所需的输出:[11,0,0,57,0,8]
是的,但您需要[11,0,0,57,0,8]
而且,当lst
以零结尾时,它也不会处理。查看Skycc的答案。这更好,但当lst
以零结束时,它仍然无法处理。现在更好:)你可以摆脱lambda:[i代表k,g在groupby(lst,bool)中代表i in((sum(g),)如果k其他g)]
@PM2Ring谢谢你的头up@PM2Ring必须拉出lambda
,使其更具可读性
lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
lst1 = []
summ = 0
for i, elem in enumerate(lst):
if elem != 0:
summ = summ + elem
else:
if summ:
lst1.append(summ)
lst1.append(elem)
summ = 0
if summ:
lst1.append(summ)
# lst1 = [11, 0, 0, 57, 0, 8]