itertools.takewhile() și dropwhile() în Python

Modulul itertools Python 3.0+

takewhile ia elementele cât timp o condiție este adevărată; dropwhile le sare cât timp este adevărată.

Sintaxă
itertools.takewhile(conditie, iterabil)
itertools.dropwhile(conditie, iterabil)

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 takewhile să ia toate elementele care îndeplinesc condiția. Se oprește la primul care nu o îndeplinește; pentru toate folosește filter().

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.