Modulo itertools
Lezione 8 di 13 del corso Iteratori in Python di Coddy.
Il modulo itertools di Python è una potente raccolta di strumenti veloci ed efficienti in termini di memoria per lavorare con gli iteratori. Fornisce un insieme di funzioni che creano iteratori per eseguire cicli ed elaborare dati in modo efficiente. Esploriamo alcune delle funzioni più utili di questo modulo.
Importare itertools
import itertoolsIteratori infiniti
Questi iteratori continuano all'infinito, a meno che tu non li fermi:
count(start, step): Conta all'infinito a partire da un valore inizialecycle(iterable): Scorre un iterabile a ciclo continuorepeat(elem, [n]): Ripete un elemento n volte (all'infinito se n non è specificato)
Iteratori che terminano con la sequenza di input più breve
chain(*iterables): Combina più iterabili in sequenzaislice(iterable, start, stop[, step]): Estrae una porzione di un iteratorezip_longest(*iterables, fillvalue=None): Come zip(), ma continua finché non si esaurisce l'iterabile più lungo
Iteratori combinatori
product(*iterables, repeat=1): Prodotto cartesiano degli iterabili di inputpermutations(iterable, r=None): Tutte le permutazioni possibili di lunghezza rcombinations(iterable, r): Combinazioni di lunghezza r in ordine ordinato
Esempi di utilizzo
import itertools
# Usando count
for i in itertools.count(10, 2):
if i > 20:
break
print(i) # Stampa 10, 12, 14, 16, 18, 20
# Usando cycle
colors = itertools.cycle(['red', 'green', 'blue'])
for _ in range(6):
print(next(colors)) # Stampa red, green, blue, red, green, blue
# Usando chain
numbers = itertools.chain([1, 2, 3], [4, 5, 6])
print(list(numbers)) # Stampa [1, 2, 3, 4, 5, 6]
# Usando combinations
letters = 'ABCD'
print(list(itertools.combinations(letters, 2)))
# Stampa [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
Il modulo itertools offre molte altre funzioni, ciascuna progettata per risolvere in modo efficiente problemi specifici legati all'iterazione. Usando questi strumenti, puoi scrivere codice più conciso ed efficiente quando lavori con iteratori e oggetti iterabili in Python.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.
Sfida
FacileCrea un programma che utilizzi il modulo itertools per generare ed elaborare una sequenza di carte da gioco. Il programma dovrebbe mostrare l'uso delle funzioni product() e islice().
Ti vengono forniti i seguenti dati:
- Due stringhe di input: una per i valori e una per i semi, separate da virgole
- Due numeri interi: le posizioni iniziale e finale per l'estrazione
Il tuo programma dovrebbe:
- Utilizzare
itertools.product()per generare tutte le possibili combinazioni di valori e semi - Utilizzare
itertools.islice()per selezionare una parte di queste combinazioni in base alle posizioni iniziale e finale fornite - Formattare ogni carta come "Rank of Suit" (ad esempio, "Ace of Spades")
- Stampare ogni carta formattata su una nuova riga
L'input verrà fornito nel seguente formato:
- Prima riga: valori (stringa separata da virgole)
- Seconda riga: semi (stringa separata da virgole)
- Terza riga: due numeri interi separati da spazi per le posizioni iniziale e finale
Provalo tu
import itertools
# Leggi l'input
ranks = input().split(',')
suits = input().split(',')
start, stop = map(int, input().split())
# TODO: Scrivi il tuo codice qui sotto
# Usa itertools.product() per generare tutte le possibili combinazioni di ranks e suits
# Usa itertools.islice() per selezionare una parte di queste combinazioni
# Formatta ogni carta come "Rank of Suit"
# Stampa ogni carta formattata su una nuova riga
# print(card)Tutte le lezioni di Iteratori in Python
Esercitati da solo: Compilatore Python online