Python: сумма чисел во вложенном списке между разделителями

1

У меня есть вложенный список, который выглядит примерно так: [[1, 0, 0, 1, 1], [1, 1, 1, 0, 1]]. Как я могу суммировать числа (в этом случае одни) между разделителями (в этом случае нули), чтобы получить выход следующим образом: [[1,2], [3,1]]?

EDIT. А как насчет ситуации, в которой список начинается с 0 и имеет больше групп из них? например, [0, 1, 0, 1, 1, 0, 1, 1][1, 2, 2]

  • 0
    что ты уже испробовал? Что если есть ведущий ноль - как это влияет на сумму? Как насчет [ [ 1, 0, 1, 0, 1] , ... ] эта сумма в [1,1,1] ?
  • 0
    Может быть начальный ноль, но вы все равно будете суммировать числа между ними ([0, 0, 1, 1, 0, 1] -> [2, 1])
Теги:
nested-lists

3 ответа

3

Вы можете использовать groupby:

from itertools import groupby

data = [[1, 0, 0, 1, 1], [1, 1, 1, 0, 1]]

separator = 0
result = [[sum(v) for k, v in groupby(element, key=lambda x: x != separator) if k] for element in data]
print(result)

Выход

[[1, 2], [3, 1]]
2

Сумма до и после индекса разделителя:

a = [[1, 0, 0, 1, 1], [1, 1, 1, 0, 1]]

for i in a:
    b = i.index(0)
    e = [sum(i[:b]),sum(i[b:])]
    print(e)

Выход:

[1, 2]
[3, 1]

Редактирование для обработки тестового примера в комментарии:

a = [[1, 0, 0, 1, 1], [1, 1, 1, 0, 1], [0,0,1,1,0,1]]
t = []

for j in a:
    b = [i for i,x in enumerate(j) if x == 0]
    for z in b:
        t.append([sum(j[:z]), sum(j[z:])])

t = set([tuple(i) for i in t if 0 not in i])

print(t)

Выход:

{(1, 2), (3, 1), (2, 1)}
2
a=[[1, 0, 0, 1, 1], [1, 1, 1, 0, 1]]
from itertools import groupby
for i in a:
    temp=[]
    for group,lis in groupby(i):
        x=sum(lis)
        if x:
            temp.append(x)
    print(temp)

Или в сжатой форме

[[sum(lis) for grp,lis in groupby(i) if grp !=0] for i in a]
  • 0
    Хорошо сделано для включения удобочитаемого ответа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню