takewhile: бери, пока дают В модуле itertools есть функция ta | PyWay – гуру Python 🐉
takewhile: бери, пока дают
В модуле itertools есть функция takewhile. Она позволяет выбирать из последовательности значения до тех пор, пока условие возвращает True.
У нее два параметра: predicate – предикат, или иными словами проверяющая функция и iterable – последовательность – это может быть список, кортеж, строка, итератор и т.п.
Код функции выглядит достаточно просто, примерно так:
def takewhile(predicate, iterable):
for x in iterable:
if predicate(x):
yield x
else:
break
Как только predicate вернет эквивалент False на очередном элементе, то цикл остановится.
Функция возвращает не список, а генератор. Если нужен список, то оборачиваем вызов в функцию list.
Давайте по примерам. Выбрать из списка все первые элементы меньше 10:
from itertools import takewhile
numbers = [1, 2, 5, 9, 11, 42, 3]
numbers10 = list(takewhile(lambda x: x < 10, numbers))
print(numbers10) # [1, 2, 5, 9]
Заметьте, что 3 не попала в результат, потому что встретив число 11 takewhile остановила работу. Это отличает ее от filter, которая всегда пройдет до конца.
Пример 2. Количество пробелов в начале строки:
string = " Wat? "
print(sum(1 for _ in takewhile(lambda x: x == ' ', string))) # 7