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]