De itertools
module bevat een verzameling functies die geavanceerde
manipulatie van iteratoren mogelijk maken. Als je dit tot het uiterste
doortrekt, voorzien ze je van een soort “iterator algebra” waarmee je
gespecialiseerde hulpmiddelen kunt bouwen in Python. Ik noem hier
slechts een klein aantal van de basisfuncties van itertools
die
wellicht van nut kunnen zijn.
chain()
chain()
neemt twee of meer iterabelen as argumenten en functioneert
als een iterabele die de samenstellende iterabelen één voor één afwerkt.
from itertools import chain
seq = chain( [1,2,3], [11,12,13,14], [x*x for x in range(1,6)] )
for item in seq:
print( item, end=" ")
zip_longest()
zip_longest()
werkt net als zip()
, maar creëert een iterabele met
een lengte gelijk aan die van de langste van de samenstellende
iterabelen. Je kunt een fillvalue=
argument opgeven om aan te geven
welke waarde er op de lege plekken moet komen te staan.
from itertools import zip_longest
seq = zip_longest( "appel", "framboos", "banaan", fillvalue=" " )
for item in seq:
print( item )
product()
product()
creëert een iterabele die alle elementen produceert van het
Cartesisch product van de iterabelen die als argumenten zijn meegegeven.
In iets minder wiskundige termen: als je twee iterabelen hebt, waarvan
de eerste de elementen \(x\), \(y\), en \(z\) heeft, en de tweede de elementen
\(a\) en \(b\), produceert product()
een iterabele met de elementen \(xa\),
\(xb\), \(ya\), \(yb\), \(za\), en \(zb\).
from itertools import product
seq = product( [1,2,3], "ABC", ["appel","banaan"] )
for item in seq:
print( item )
permutations()
permutations()
krijgt een iterabele als argument, en een optioneel
tweede argument dat een lengte aangeeft. Het creëert een iterabele die
alle permutaties produceert die combinaties zijn van elementen van de
meegegeven iterabele, met de gegeven lengte. Als geen lengte wordt
meegegeven, genereert het alle permutaties van alle elementen. Als de
meegegeven iterabele elementen dubbel bevat, zullen er kopieën van
permutaties zijn.
from itertools import permutations
seq = permutations( [1,2,3], 2 )
for item in seq:
print( item )
combinations()
combinations()
krijgt een iterabele als argument, en een tweede
argument dat een lengte aangeeft. Het creëert een iterabele die
combinaties produceert van elementen van het eerste argument, met de
gegeven lengte. De lengte is niet optioneel (wat logisch is, aangezien
bij maximale lengte er maar één combinatie is). De elementen van de
combinaties staan in de volgorde dat ze in de originele iterabele
stonden. Als er elementen meerdere malen voorkomen in de originele
iterabele, zullen er kopieën van combinaties zijn.
from itertools import combinations
seq = combinations( [1,2,3], 2 )
for item in seq:
print( item )
combinations_with_replacement()
combinations_with_replacement()
werkt net als combinations()
, maar
ieder element van de iterabele mag meerdere keren gebruikt worden.
from itertools import combinations_with_replacement
seq = combinations_with_replacement( [1,2,3], 2 )
for item in seq:
print( item )