Выделение интервалов из списка

Есть, например, такой список:

[0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 2, 0]

Мне нужно выделить из него:

[[1], [-1], [1], [1], [1,2]]

Как это можно быстро сделать?


Ответы (3 шт):

Автор решения: deethereal

Вы может добавлять элементы, пока они не равны 0:

x= [0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 2, 0]

ans=[]
tmp=[]
for el in x:
    if el==0:
        if len(tmp)>0:
            ans.append(tmp)
        tmp=[]
    else:
        tmp.append(el)
if len(tmp)>0:
    ans.append(tmp)

ans будет представлять из себя [[1], [-1], [1], [1], [1,2]]

→ Ссылка
Автор решения: Zhihar

способ 1:

делайте в лоб просто:

arr = [0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 2, 0]

res = []
tmp = []
for i in arr:
    if i == 0:
        if tmp:
            res.append(tmp)
        tmp = []
    else:
        tmp.append(i)

if tmp:
    res.append(tmp)

print(res)

способ 2:

а можно не в лоб и с извратом :)

arr = [0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 2, 0]

res = [[int(j) for j in i.split(',') if j != ''] for i in (str(arr)[1:-1].replace(' ', '') + ',').split('0,') if i != '']

print(res)

способ 3:

тот же способ 2, только чуть с другого бока и покороче:

res = [list(map(int, i.split())) for i in (' ' + ' '.join(map(str, arr))).split(' 0') if i != '']
→ Ссылка
Автор решения: strawdog
from itertools import groupby

a = [0, 1, 0, -1, 0, 1, 0, 1, 0, 1, 2, 0]
res = [list(g) for k, g in groupby(a, key=lambda x:x!=0) if k]

res:

[[1], [-1], [1], [1], [1, 2]]
→ Ссылка