2010-04-19 14 views

risposta

42

C'è una funzione shuffle nel modulo casuale. Si noti che mescola sul posto in modo da avere prima di convertire la stringa a un elenco di caratteri, in ordine casuale, poi unirsi di nuovo il risultato.

import random 
l = list(s) 
random.shuffle(l) 
result = ''.join(l) 
+0

+1 per la "in-place". Quindi 'print random.shuffle (['a', 'b', 'c'])' restituirà 'None'. Dobbiamo usare 'L = [ 'a', 'b', 'c']' 'quindi random.shuffle (L)' e 'L' stampa invece. – Basj

66
>>> import random 
>>> s="abcdef123" 
>>> ''.join(random.sample(s,len(s))) 
'1f2bde3ac' 
-2

un take alternativo per mischiare una stringa:

# Python < 3 
import random, array 

def shuffle_text(text): 
    if isinstance(text, unicode): 
     temp= array.array('u', text) 
     converter= temp.tounicode 
    else: 
     temp= array.array('c', text) 
     converter= temp.tostring 
    random.shuffle(temp) 
    return converter() 

ho aggiunto questa risposta solo per completezza amor; sul mio server di casa lento, è più veloce per stringhe di input di piccole dimensioni (ma la differenza è molto piccola), mentre è più lenta per stringhe più grandi.