Menu
Coddy logo textTech

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 itertools

Iteratori infiniti

Questi iteratori continuano all'infinito, a meno che tu non li fermi:

  • count(start, step): Conta all'infinito a partire da un valore iniziale
  • cycle(iterable): Scorre un iterabile a ciclo continuo
  • repeat(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 sequenza
  • islice(iterable, start, stop[, step]): Estrae una porzione di un iteratore
  • zip_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 input
  • permutations(iterable, r=None): Tutte le permutazioni possibili di lunghezza r
  • combinations(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.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

challenge icon

Sfida

Facile

Crea 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:

  1. Utilizzare itertools.product() per generare tutte le possibili combinazioni di valori e semi
  2. Utilizzare itertools.islice() per selezionare una parte di queste combinazioni in base alle posizioni iniziale e finale fornite
  3. Formattare ogni carta come "Rank of Suit" (ad esempio, "Ace of Spades")
  4. 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