← retour aux snippets

itertools.takewhile/dropwhile: filtrage par condition

Inclure/ignorer tant qu'une condition est vraie sur le flux.

objectif

Inclure/ignorer tant qu’une condition est vraie sur le flux.

code minimal

import itertools
xs = [1,2,3,0,4]
head = list(itertools.takewhile(lambda x: x>0, xs))
tail = list(itertools.dropwhile(lambda x: x>0, xs))
print(head == [1,2,3] and tail == [0,4])  # attendu: True

utilisation

import itertools
lines = ["#c1", "#c2", "data", "more"]
data = list(itertools.dropwhile(lambda s: s.startswith("#"), lines))
print(data[0] == "data")

variante(s) utile(s)

import itertools
print(list(itertools.takewhile(str.isalpha, "abc123")) == ["a","b","c"])

notes

  • Les prédicats sont évalués séquentiellement; stop dès que la condition échoue (takewhile).
  • Combinez avec islice et chain pour des pipelines lisibles.