簡體   English   中英

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

[英]Sum elements of a list between zeros in Python

我有一個清單:

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]

這是使用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]

當然,如果列表中的項目只是數字(為了避免泛化和引入ambuigities), lambda可以用bool替換:

result = [i for k, g in groupby(lst, bool) for i in ((sum(g),) if k else g)]

你在0時附加額外的summ,在結尾時丟失1個summ

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]

只需在循環后添加一個額外的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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM