Expressions generadores

Compte

A l’assignatura no s’exigeix saber-ho fer servir, però són molt útils.

Una altra forma de crear un iterador és fer servir les expressions generadores: expressions que creen un iterador (venen a ser una mena «d’iteradors anònims»).

Sintaxi

it = (expressió for var in iterable)     # l'expressió juga el paper de map()

# o bé, alternativament,

it = (expressió for var in iterable if condició)  # la condició juga el paper de filter()

Nota

Amb una sintaxi semblant podem crear llistes o diccionaris. Vegeu list comprehensions a la documentació de Python.

Exemples:

>>> it = (x**3 for x in range(10))
>>> list(it)
[0, 1, 8, 27, 64, 125, 216, 343, 512, 729]
>>> sum(1/x for x in range(2, 100))
4.17737751763962
>>> sorted(s+s[::-1] for s in 'avui es un dia de festa'.split())
['avuiiuva', 'deed', 'diaaid', 'esse', 'festaatsef', 'unnu']
>>> min(x*x - 2*x +3 for x in range(-10, 10)) 
2
>>> sorted((x, y) for x in range(3) for y in 'abc')
[(0, 'a'), (0, 'b'), (0, 'c'), (1, 'a'), (1, 'b'), (1, 'c'), (2, 'a'), (2, 'b'), (2, 'c')]
>>> [(a, a**2) for a in range(1,8)]
[(1, 1), (2, 4), (3, 9), (4, 16), (5, 25), (6, 36), (7, 49)]
>>> {y:x for x,y in enumerate('CREMA')}
{'C': 0, 'R': 1, 'E': 2, 'M': 3, 'A': 4}