Permutazioni con ripetizione

L’algoritmo precedente genera duplicati se ci sono elementi ripetuti nella lista originale.


La struttura dati set raccoglie i risultati eliminando le ripetizioni.

def scambia(lista, p1, p2):
    temp      = lista[p1]
    lista[p1] = lista[p2]
    lista[p2] = temp
 
def permuta(lista, pos, n, elenco):
    if(pos == n-1):
        elenco.add(lista)
    else:
        for k in range(pos, n):
            scambia(lista, pos, k)
            permuta(lista, pos+1, n, elenco)
            scambia(lista, pos, k)
 
LISTA = [1, 2, 3, 4, 3]
ELENCO = set()  # <--
permuta(LISTA, 0, len(LISTA), ELENCO)
ELENCO = list(ELENCO)  # Il risultato come lista
ELENCO.sort()  # <-- Facoltativo: ordinati 
for x in ELENCO:
    print(x)