Python中零之间的列表元素的元素

时间:2016-11-24 13:07:26

标签: python list

我有一个清单:

lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]

我需要新列表中0之间的元素总和。 我试过了

lst1 = []
summ = 0
for i, elem in enumerate(lst):
    if elem != 0:
        summ = summ + elem
    else:
        lst1.append(summ)
        lst1.append(elem)
        summ = 0

但它会返回[11, 0, 0, 0, 57, 0],而我期待 [11, 0, 0, 57, 0, 8]

3 个答案:

答案 0 :(得分:7)

以下是使用itertools.groupby列表理解的一种方法。通过检查元素是否为零来完成分组,如果不为零,则对组中的所有项进行求和:

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)]

答案 1 :(得分:2)

当你的0为0时,你会追加额外的总和,并且在结尾处缺少1个总和

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]

答案 2 :(得分:0)

在循环后添加额外的lst1.append(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)