
Le combinazioni con ripetizione in Python
La funzione combinations_with_replacement() di Python è una funzione del modulo itertools in Python che ti permette di per creare tutte le possibili combinazioni con ripetizione di lunghezza specificata da un iterabile (come una lista).
combinations_with_replacement(iterable, r)
La funzione ha due parametri:
- iterable: È l'oggetto iterabile (come una lista, stringa, ecc.) dal quale verranno prese le combinazioni.
- r: È la lunghezza di ogni combinazione. Deve essere un numero intero non negativo.
Restituisce ogni combinazione possibile di lunghezza r degli elementi dell'iterabile, inclusi i duplicati.
Questa funzione ammette le ripetizioni degli elementi nelle combinazioni. Ad esempio, se l'iterabile contiene le lettere [A,B,C], le combinazioni con ripetizione a gruppi di due ammettono anche gli elementi duplicati [A,A] , [B,B] e [C,C] oltre a quelle con gli elementi distinti [A,B], [A,C], [B,C]. Se hai bisogno di ottenere le combinazioni senza ripetizione, usa la funzione combinations() del modulo itertools. In questo caso i duplicati sono eliminati.
Essendo una funzione di un modulo esterno, per usare combinations_with_replacement(), devi prima importarla dal modulo itertools.
from itertools import combinations_with_replacement
Ecco un esempio pratico.
Supponi di avere una lista elementi = [A, B, C] e di voler trovare tutte le combinazioni con ripetizioni di lunghezza 2.
- from itertools import combinations_with_replacement
- elementi = ['A', 'B', 'C']
- combinazioni = list(combinations_with_replacement(elementi, 2))
- print(combinazioni)
Questo script produce in output una lista con tutte le possibili combinazioni prese a gruppi di due.
Nelle combinazioni appaiono anche gli stessi elementi ripetuti ('A','A'), ('B','B') e ('C','C').
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
Ricorda che nelle combinazioni l'ordine degli elementi nelle combinazioni non è rilevante.
Ad esempio, la tupla ('A', 'B') è considerata la stessa di ('B', 'A'). Per questa ragione nel risultato c'è solo ('A','B')
Attenzione ai grandi set di dati. Il numero delle combinazioni cresce rapidamente e impiega una grande quantità di memoria del computer e di tempo per eseguire lo script, influenzando l'efficienza. In questi casi usa la funzione con cautela.
Questa funzione del modulo itertools è molto utile, perché ti permette di sviluppare delle applicazioni in statistica e di risolvere problemi che richiedono il calcolo di combinazioni con ripetizione, senza dover sviluppare molte righe di codice.