Direct naar de hoofdinhoud
Module 6 · Les 4 van 424/36 in de cursus~12 min
Modulelessen (4/4)

Essentiële itertools

Python biedt tal van iteratietools: sommige zijn ingebouwd (altijd beschikbaar), andere bevinden zich in de itertools module van de standaard bibliotheek. Dit zijn de belangrijkste.

enumerate: index + waarde

Wanneer je zowel de index als het element nodig hebt tijdens een lus:

Python
for i, parola in enumerate(["a", "b", "c"]):
    print(i, parola)
# 0 a
# 1 b
# 2 c

# parte da un altro numero:
for i, parola in enumerate(["a", "b", "c"], start=1):
    print(i, parola)

zip: parallel herhalen

Combineert meerdere iterables element voor element:

Python
nomi = ["Ada", "Linus", "Grace"]
eta = [36, 54, 85]

for n, e in zip(nomi, eta):
    print(f"{n} ha {e} anni")

zip stopt bij de kortste iterabele. Voor een "lange" ritssluiting gebruiken BESCHERMD_INLINE_10.

Een dictaat samenstellen uit twee parallelle lijsten:

Python
dict(zip(nomi, eta))
# {'Ada': 36, 'Linus': 54, 'Grace': 85}

itertools.chain: iterabelen samenvoegen

Python
from itertools import chain
list(chain([1, 2], [3, 4], [5]))
# [1, 2, 3, 4, 5]

Zonder een tussenlijst te maken: handig voor bestanden, generators, etc.

itertools.count en repeat: oneindige iteratoren

Python
from itertools import count, repeat

# count(start, step) — interi crescenti infiniti
for i in count(10, 2):
    if i > 20: break
    print(i)
# 10, 12, 14, 16, 18, 20

# repeat(x, n) — ripete lo stesso valore n volte (o all'infinito senza n)
list(repeat("ok", 3))   # ['ok', 'ok', 'ok']

itertools.combinations

Alle combinaties (zonder herhalingen, volgorde-onafhankelijk) van een gegeven lengte:

Python
from itertools import combinations
list(combinations([1, 2, 3, 4], 2))
# [(1,2), (1,3), (1,4), (2,3), (2,4), (3,4)]

Bestelde variant: permutations. Varianten met herhaling: combinations_with_replacement en product.

zip() voor woordenboeken en onevenwichtige iterabelen

De functie zip() stopt zodra de kortste iterabele invoer is uitgeput. Als u elementen wilt koppelen en overtollige waarden wilt behouden (ze wilt vullen met een standaardwaarde zoals None), kunt u zip_longest() uit de module itertools gebruiken. Bovendien kunt u een resultaat zip rechtstreeks doorgeven aan dict() om direct een sleutelwaardekaart samen te stellen.

Probeer het

Oefening#python.m6.l4.e1
Pogingen: 0Laden…

Gegeven de parallelle lijsten `landen = ['Italia', 'Francia', 'Spagna']` en `hoofdsteden = ['Roma', 'Parigi', 'Madrid']`, bouwt u `mapping` als een dictaat {land: hoofdstad}. Evalueer 'in kaart brengen'.

Editor laden…
Toon hint

dict(zip(landen, hoofdsteden))

Oplossing beschikbaar na 3 pogingen

Oefening beoordelen

Oefening#python.m6.l4.e2
Pogingen: 0Laden…

Gegeven `words = ['ciao', 'mondo', 'python']`, bouwt u `enumerated_items` als een lijst met tupels (i, woord) beginnend bij i=1. Evalueer `enumerated_items`.

Editor laden…
Toon hint

opsommen(woorden, start=1) → (i, waarde) tupels.

Oplossing beschikbaar na 3 pogingen

Extra uitdaging

Oefening#python.m6.l4.e3
Pogingen: 0Laden…

Given two lists `keys = ['a', 'b', 'c']` and `values = [10, 20, 30]`, use `zip` to pair them and convert the result into a dictionary. Store the resulting dictionary in `my_dict` and evaluate it.

Editor laden…
Toon hint

Gebruik dict(zip(sleutels, waarden)) en wijs het toe aan my_dict.

Oplossing beschikbaar na 3 pogingen