3 itertools.dropwhile

itertools.dropwhile позволяет принимать элементы из последовательности после того, как условие первого становится False .

 def is_even(x):
    return x % 2 == 0


lst = [0, 2, 4, 12, 18, 13, 14, 22, 23, 44]
result = list(itertools.dropwhile(is_even, lst))

print(result) 

Эти выходы [13, 14, 22, 23, 44] .

( В этом примере такой же , как пример для takewhile , но с использованием dropwhile .)

Отметим, что первое число , которое нарушает предикат (т.е. функция возвращает логическое значение) is_even есть, 13 . Все элементы до этого отбрасываются.

Выход производства dropwhile похож на выходе генерируется из кода ниже.

 def dropwhile(predicate, iterable):
    iterable = iter(iterable)
    for x in iterable:
        if not predicate(x):
            yield x
            break
    for x in iterable:
        yield x 

Конкатенация результатов , полученных takewhile и dropwhile производит оригинальную Iterable.

result = list(itertools.takewhile(is_even, lst)) + list(itertools.dropwhile(is_even, lst))