TL; DR: si "rompe" sulle liste con oltre 2080 elementi, ma non preoccupatevi troppo :)
risposta completa:
Prima di tutto, si noti che "mischiare" una lista può essere inteso (concettualmente) come generante tutte le possibili permutazioni degli elementi delle liste, e selezionando una di queste permutazioni a caso.
Quindi, è necessario ricordare che tutti i generatori di numeri casuali computerizzati autonomi sono in realtà "pseudo" casuali. Cioè, non sono in realtà casuali, ma si basano su una serie di fattori per cercare di generare un numero che è difficile da indovinare in avanzato, o riprodotto intenzionalmente. Tra questi fattori è in genere il numero generato precedente. Quindi, in pratica, se utilizzi un generatore casuale continuamente un certo numero di volte, alla fine inizierai a ottenere sempre la stessa sequenza (questo è il "periodo" a cui si riferisce la documentazione).
Infine, la docstring su Lib/random.py (il modulo casuale) dice che "Il periodo [del generatore di numeri casuali] è 2**19937-1
".
Quindi, dato tutto ciò, se la tua lista è tale che ci sono 2**19937
o più permutazioni, alcune di queste non saranno mai ottenute mescolando l'elenco. Dovresti (di nuovo, concettualmente) generare tutte le permutazioni della lista, quindi generare un numero casuale x e scegliere la xth permutation. La prossima volta, genererai un altro numero casuale y, e scegli la permutazione yth. E così via. Ma dal momento che ci sono più permutazioni rispetto a quelle ottenute con numeri casuali (perché, al massimo dopo i numeri generati da 2**19937-1
, inizierai a ottenere di nuovo le stesse), inizierai a selezionare di nuovo le stesse permutazioni.
Quindi, vedete, non è esattamente una questione di quanto è lunga la vostra lista (anche se questo entra nell'equazione). Inoltre, 2**19937-1
è piuttosto una lunga serie. Ma, comunque, a seconda delle tue esigenze di mescolamento, dovresti tenere tutto questo in mente. Su un caso semplice (e con un rapido calcolo), per una lista senza elementi ripetuti, 2081 elementi darebbero 2081!
permutazioni, che è più che 2**19937
.
+1 per ben spiegare l'argomento e problema. Imho questa dovrebbe essere la risposta accettata. Oh, e mi piacerebbe spostare il TD; DR al vertice poiché la maggior parte delle persone che si spaventano da un corpo di testo probabilmente non leggerà così in basso :-). – Joey
Grazie :) E buona idea su TL; DR, lo farò! – rbp
@Johannes: non hai cancellato la tua risposta :) Ancora, grazie! – rbp