Python: сумма чисел во вложенном списке между разделителями - PullRequest
0 голосов
/ 18 октября 2018

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

РЕДАКТИРОВАТЬ И как насчет ситуации, в которой список начинается с 0 и имеетбольше групп?например [0, 1, 0, 1, 1, 0, 1, 1] -> [1, 2, 2]

Ответы [ 3 ]

0 голосов
/ 19 октября 2018
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 голосов
/ 19 октября 2018

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

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)}
0 голосов
/ 18 октября 2018

Вы можете использовать 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]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...