Mescolare

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…