Data una lista qualsiasi visualizza tutte le liste permutazioni: Pn=n!
def scambia(lista, p1, p2):
temp =lista[p1]
lista[p1]=lista[p2]
lista[p2]=temp
def permuta(lista, pos, n):
if(pos == n):
print(lista,end="\t")
else:
for k in range(pos, n):
scambia(lista,pos, k)
permuta(lista, pos+1, n)
scambia(lista,pos, k)
LISTA=[1,2,3,4]
permuta(LISTA, 0, len(LISTA))
Parola
Data una certa parola si ottengono tutti gli anagrammi
Si utilizzano le funzioni
list(...)
str().join(...)
def scambia(lista, p1, p2):
temp =lista[p1]
lista[p1]=lista[p2]
lista[p2]=temp
def permuta(lista, pos, n):
if(pos == n):
print(str().join(lista), end="\t")
else:
for k in range(pos, n):
scambia(lista,pos, k)
permuta(lista,pos+1, n)
scambia(lista,pos, k)
PAROLA="amor"
permuta(list(PAROLA), 0, len(PAROLA))
Le parole non sono in ordine alfabetico.
L’elenco può essere ordinato.
Senza ripetizioni
Se ci sono lettere ripetute alcune parole si ripeteranno più volte.
La sequenza di tipo set elimina 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):
parola=str().join(lista)
print(parola, end="\t")
elenco.append(parola)
else:
for k in range(pos, n):
scambia(lista,pos, k)
permuta(lista, pos+1, n, elenco)
scambia(lista,pos, k)
PAROLA = "amor"
ELENCO = []
permuta(list(PAROLA), 0, len(PAROLA), ELENCO)
ELENCO.sort()
print("\n")
for parola in ELENCO:
print(parola, end="\t")