Malgré de nombreuses réponses suggérant l'utilisation random.shuffle(x)
et x.pop()
Il est très lent pour les données volumineuses et le temps nécessaire à l'établissement d'une liste de données. 10000
Les éléments ont pris environ 6 seconds
lorsque la lecture aléatoire est activée. lorsque la lecture aléatoire est désactivée la vitesse a été 0.2s
la méthode la plus rapide après avoir testé toutes les méthodes données ci-dessus s'est avérée être celle écrite par @jfs
import random
L = [1,"2",[3],(4),{5:"6"},'etc'] #you can take mixed or pure list
i = random.randrange(len(L)) # get random index
L[i], L[-1] = L[-1], L[i] # swap with the last element
x = L.pop() # pop last element O(1)
Pour étayer mon propos, voici le tableau de la complexité temporelle à partir de cette source
S'il n'y a pas de doublons dans la liste,
vous pouvez également atteindre votre objectif en utilisant des ensembles. une fois la liste établie en ensembles, les doublons seront supprimés. remove by value
et remove random
coût O(1)
C'est la méthode la plus propre que j'ai trouvée.
L=set([1,2,3,4,5,6...]) #directly input the list to inbuilt function set()
while 1:
r=L.pop()
#do something with r , r is random element of initial list L.
Contrairement à lists
qui soutiennent A+B
option, sets
soutiennent également A-B (A minus B)
ainsi que A+B (A union B)
y A.intersection(B,C,D)
. très utile lorsque vous souhaitez effectuer des opérations logiques sur les données.
OPTIONNEL
SI vous voulez de la rapidité lorsque des opérations sont effectuées sur la tête et la queue d'une liste, utilisez python dequeue (double ended queue) pour étayer mon propos voici l'image. une image vaut mille mots.