Я хотел бы сгруппировать последовательные элементы, удовлетворяющие предикату. Doctest для такой функции будет выглядеть какPython - группировка последовательных элементов, удовлетворяющих предикату
>>> group([1, 2, 3, 0, 4, 5, 0, 0, 6], lambda x: x != 0)
[[1, 2, 3], [4, 5], [6]]
>>> group([1, 2, 3, 0, 4, 5, 0, 0, 6], lambda x: x == 0)
[[0], [0, 0]]
я написал прототип, где я использую itertool в TakeWhile, но это некрасиво, потому что я продолжаю кастинг между списком и ITER. Я также не хочу читать индексы списка, потому что он чувствует себя неэффективно. Может ли кто-нибудь указать мне, как правильно сочетать и сопоставлять itertools?
from itertools import takewhile
def group(l, p):
blocks = []
while True:
i = iter(l)
taken = list(takewhile(p, i))
l = list(i)
if len(taken) > 0:
blocks.append(taken)
if len(l) == 0:
return blocks
Спасибо!
Что случилось с 'itertools.groupby'? –
Не удалось решить, как его использовать, но теперь я могу. Спасибо всем. – Derek