Python mette a disposizione, tramite la libreria itertools
, dei metodi diretti per per ottenere permutazioni e combinazioni di una sequenza.
Combinazioni
Importiamo il package itertools per poter implementare il metodo interessato:
>>> from itertools import combinations
Effettuiamo la chiamata al metodo combinations(iterabile, r)
passandogli come parametro una lista e la lunghezza delle combinazioni che vogliamo ottenere:
>>> combinazioni = list(combinations([102, 2, 103, 43], 3))
Come possiamo notare combinations(iterabile, r)
restituisce una lista di tuple della lunghezza specificata(in questo caso ogni tupla conterrà 3 valori) contenenti tutte le combinazioni possibili:
>>> combinazioni
[(102, 2, 103), (102, 2, 43), (102, 103, 43), (2, 103, 43)]
Nota: se la lista passata in ingresso è ordinata, le tuple che avremmo in output saranno anch'esse ordinate.
>>> combinazioni = list(combinations('ABCD', 2))
[('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]
Nel package itertools esiste inoltre la funzione combinations_with_replacement(iterable, r)
che ci permette di ripetere un valore più volte nella stessa tupla:
>>> from itertools import combinations_with_replacement
>>> combinazioni = list(combinations_with_replacement("ABCD", 2))
>>> combinazioni
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'B'), ('B', 'C'), ('B', 'D'), ('C', 'C'), ('C', 'D'), ('D', 'D')]
Conclusione
Bene! Siamo giunti al termine...
Spero di esserti stato utile e se lo sono stato ti invito a condividere l'articolo sui social e a seguirmi su twitter e instagram, alla prossima!