Mescolare i numeri contenuti in una lista
Soluzione 1
La funzione shuffle() della libreria random risolve il problema
import random # shuffle()
NUMERI = [1, 9, 2, 8] ; print(NUMERI) # [1, 9, 2, 8]
random.shuffle(NUMERI); print(NUMERI) # [8, 2, 9, 1]
random.shuffle(NUMERI); print(NUMERI) # [9, 8, 1, 2]
Soluzione 2
Osserva
- esegue n volte lo scambio di due elementi (puoi aumentare 2*n, …)
- lo scambio coinvolge due elementi a caso
...
n = len(lista) # Quanti elementi?
for i in range(n): # Quanti scambi?
p1 = random.randint(0, n-1) # 1° posizione casuale
p2 = random.randint(0, n-1) # 2° posizione casuale
temp = lista[p1] # scambia p1-esimo con p2-esimo
lista[p1] = lista[p2]
lista[p2] = temp
...
Con la sintassi di Python lo scambio può essere espresso con una sola riga di codice
lista[p1], lista[p2] = lista[p2], lista[p1]
Soluzione 3
...
n = len(lista) # Quanti elementi?
for p1 in range(n):
p2 = random.randint(0, n-1) # posizione casuale
temp = lista[p1] # scambia p1-esimo con p2-esimo
lista[p1] = lista[p2]
lista[p2] = temp
...
Osserva
- esegue n volte lo scambio di due elementi
- lo scambio coinvolge sicuramente tutti gli elementi almeno una volta…