@BlackAlexYT

Как разбить массив на подмассивы используя «0» как разделитель?

Дается массив цисел mas, в котором находятся нули, нужно разбить массив на подмассивы, используя "0" как разделитель. Например mas=[1,2,3,0,5,3,6,0,7,5] должен стать [[1,2,3],[5,3,6],[7,5]]
  • Вопрос задан
  • 256 просмотров
Решения вопроса 2
lxstvayne
@lxstvayne
Люблю Python
Решение если у тебя бесконечные ресурсы:
mas = [1, 2, 3, 0, 5, 3, 6, 0, 7, 5]
res = [list(map(int, list(el))) for el in ''.join(map(str, mas)).split('0')]
print(res)

Одно из решений питониста джуна:
mas = [1, 2, 3, 0, 5, 3, 6, 0, 7, 5]

res = []

temp = []
for el in mas:
    if el != 0:
        temp.append(el)
    else:
        res.append(temp)
        temp = []
else:
    res.append(temp)

print(res)

И, наконец, решение питониста повидавшего жизнь. Используется библиотека more_itertools:
from more_itertools import split_at


mas = [1, 2, 3, 0, 5, 3, 6, 0, 7, 5]

res = list(split_at(mas, lambda x: not x))

print(res)


Если есть ещё какие-нибудь интересные решения, можете приложить в комментарии к ответу.
Ответ написан
Комментировать
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
Без сторонних либ я бы делал так:
def split0(arr: list) -> list:
    res = [[]]
    for x in arr:
        res[-1].append(x) if x else res.append([])
    return res

А вот для любителей функциональщины:
from itertools import takewhile  
def split0(a): 
    it = iter(a) 
    return [[x for x in takewhile(bool, it)] for _ in range(a.count(0) + 1)]
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Vindicar
@Vindicar
RTFM!
Как выглядит твоя попытка решить это?
спойлер
Метод index() у списка в помощь
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы