2014-04-30 5 views
0

Je voudrais créer une liste non ordonnée en million, xrange(1, 1000000) pour par exemple me donne une liste ordonnée. Je pense que j'ai besoin de quelque chose comme xrange mais le génère d'une manière non ordonnée. Je pense que je peux générer une liste manuellement en bouclant autour de random.randint et quelques vérifications manuelles pour garantir l'unicité du nombre dans la liste mais je pense que cela prendrait du temps. Des idées?Génération de liste non ordonnée en python

+0

Cela peut facilement être résolu avec 'shuffle', mais si vous ne voulez pas stocker ensemble Shuffled entière en mémoire et utiliser un iterator in-situ aléatoire pour cela, les choses peuvent devenir difficiles. –

+0

@rr: Je ne suis pas sûr que vous pouvez vous en sortir en ne stockant pas le tableau en mémoire si vous voulez assurer l'unicité? – jmetz

+0

@jmetz Cela m'intéresse aussi. J'ai ajouté le commentaire pour que OP soit conscient de cette limitation, car il utilise explicitement 'xrange' et est clairement préoccupé par les performances. –

Répondre

2
import random 
L = range(1, 1000000) 
random.shuffle(L) # shuffles in-place 

sur python3, vous devez utiliser

L = list(range(1, 1000000)) 
random.shuffle(L) # shuffles in-place 
2

Utilisez le module random de NumPy. Plus précisément np.random.permutation

>>> import numpy as np 
>>> np.random.permutation(5) 
array([2, 1, 0, 3, 4]) 
0

Si vous utilisez numpy vous pouvez utiliser permutation:

numpy.random.permutation(10) 
>> array([1, 7, 6, 0, 5, 9, 2, 3, 8, 4]) 
Questions connexes