Ce face itertools.takewhile() și dropwhile()
takewhile(f, colectie) produce elementele de la început până la primul pentru care f este falsă, apoi se oprește definitiv. dropwhile(f, colectie) face invers: sare peste elementele de la început cât timp f este adevărată și produce tot restul, inclusiv elementele ulterioare care ar îndeplini condiția.
Spre deosebire de filter(), se uită doar la începutul colecției, nu la fiecare element.
Parametri
| Parametru | Descriere |
|---|---|
conditie |
Funcția de test. |
iterabil |
Elementele. |
Ce returnează
Un iterator.
Exemple
Exemplul 1: Antet și conținut
from itertools import takewhile, dropwhile
randuri = ["# autor: Ana", "# data: 2026", "linia 1", "# notă", "linia 2"]
este_comentariu = lambda r: r.startswith("#")
print(list(takewhile(este_comentariu, randuri)))
print(list(dropwhile(este_comentariu, randuri)))
print(list(takewhile(lambda n: n < 10, [1, 4, 12, 3])))
Rezultat
['# autor: Ana', '# data: 2026']
['linia 1', '# notă', 'linia 2']
[1, 4]
Greșeli frecvente
- Te aștepți ca
takewhilesă ia toate elementele care îndeplinesc condiția. Se oprește la primul care nu o îndeplinește; pentru toate foloseștefilter().
Comenzi înrudite
filter(): Păstrează doar elementele pentru care o funcție returnează o valoare adevărată.itertools.filterfalse() și compress(): filterfalse păstrează elementele pentru care condiția este falsă; compress filtrează după o listă de valori adevărat/fals.itertools.islice(): Ia o „felie” dintr-un iterator sau generator, ca [start:stop:pas] la liste.