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

Pet*_*rov 4 python list

我有一个清单:

lst = [1, 2, 3, 5, 0, 0, 9, 45, 3, 0, 1, 7]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Mos*_*oye 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]
Run Code Online (Sandbox Code Playgroud)

当然,如果列表中的项目只是数字(为了避免一般化和引入相关性),lambda可以替换为bool:

result = [i for k, g in groupby(lst, bool) for i in ((sum(g),) if k else g)]
Run Code Online (Sandbox Code Playgroud)

  • 现在好多了:) (2认同)