Il modulo itertools
Il modulo itertools è un modulo presente nella libreria standard di Python che contiene molte funzioni che sono molto utili nella programmazione funzionale, in particolar modo nelle iterazioni.
La funzione count() comincia a contare da un determinato valore.
La funzione cycle() effettua una iterazione infinita su di un oggetto iterable
La funzione repeat() ripete un oggetto, sia infinte volte che per un determinato valore di volte.
Vediamo un esempio
from itertools import count
for i in count(4):
if i > 10:
break
print(i)
eseguendo
>>>
4
5
6
7
8
9
10
Altre Funzioni
Esistono altre funzioni all’interno del modulo che lavorano in maniera simile a map() e filter().
- takewhile() – prende gli elementi di un oggetto iterabile finchè una funzione predicato rimane True
- chain() – combina diversi oggetti iterabili in un’unico oggetto iterabile
- accumulate() – restituisce il numero totale di valori in un oggetto iterabile.
Vediamo un esempio
from itertools import accumulate, takewhile, chain
lista1 = list(accumulate(range(7)))
print(lista1)
lista2 = list(takewhile(lambda x: x<5, lista1))
print(lista2)
print(list(chain(lista1,lista2)))
eseguendo
>>>
[0, 1, 3, 6, 10, 15, 21]
[0, 1, 3]
[0, 1, 3, 6, 10, 15, 21, 0, 1, 3]
Funzioni combinatoriali
Esistono funzioni di tipo combinatoriale nel modulo itertools come product() e permutation(). Queste funzioni sono molto utili quando si vogliono ottenere tutte le possibili combinazioni degli elementi.
from itertools import permutations, product
lettere = ("A","B","C")prodotto = list(product(lettere,lettere))
combinazioni = list(permutations(lettere))
print(prodotto)
print(combinazioni)
eseguendo
>>>
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
[('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]