Выделение интервалов из списка
Есть, например, такой список:
[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]]