J'ai compté quelque chose et il est sorti à N.
Maintenant, j'aimerais avoir une liste contenant 0 à N chiffres.
Exemple:
N = 5
alors, count_list = [1, 2, 3, 4, 5]
Comment pourrais-je faire cela?
De plus, une fois la liste créée, j'aimerais sélectionner au hasard un numéro de cette liste et utiliser ce numéro.
Après cela, j'aimerais sélectionner un autre numéro parmi les numéros restants de la liste (N-1), puis l'utiliser également.
Cela continue, la liste est vide.
Comment puis-je faire ceci?
Vous pouvez créer l'énumération des éléments en procédant comme suit:
mylist = list(xrange(10))
Ensuite, vous pouvez utiliser la fonction random.choice
pour sélectionner vos éléments:
import random
...
random.choice(mylist)
Comme Asim Ihsan l’a correctement déclaré, ma réponse n’a pas répondu à l’ensemble du problème du PO. Pour supprimer les valeurs de la liste, il suffit d'appeler list.remove()
:
import random
...
value = random.choice(mylist)
mylist.remove(value)
Comme l'a fait remarquer takataka, la fonction intégrée xrange
a été renommée range
en Python 3.
Vous pouvez essayer ce code
import random
N = 5
count_list = range(1,N+1)
random.shuffle(count_list)
while count_list:
value = count_list.pop()
# do whatever you want with 'value'
Quant à la première partie:
>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>
Pour le second, lire 9.6. random - Génère des nombres pseudo-aléatoires.
>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]
C'est l'idée générale.
Au fait, vous pouvez également être intéresséen lecture Sélection aléatoire d'éléments dans une liste, sans répétition (recette Python).
Il existe quelques implémentations de la sélection aléatoire rapide.
Vous n'avez pas besoin de compter les choses si vous voulez choisir un élément aléatoire. Utilisez simplement random.choice()
et transmettez votre itérable:
import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
Si vous devez vraiment les compter, utilisez random.randint(1, count+1)
.
Vous pouvez utiliser:
import random
random.choice(range(n))
ou:
random.choice(range(1,n+1))
si vous le voulez de 1
à n
et non de 0
.
Après cela, j'aimerais sélectionner un autre numéro parmi les numéros restants de la liste (N-1), puis l'utiliser également.
Ensuite, vous ne voudrez peut-être pas vraiment créer une liste de nombres de 1 à N uniquement pour en choisir un (pourquoi ne pas simplement demander un nombre aléatoire directement dans cette plage, au lieu de le créer explicitement, à choisir?), Mais au lieu de mélanger une telle liste. Heureusement, le module random
vous a également fourni une solution: utilisez simplement random.shuffle
.
Bien sûr, si vous avez une longue liste de nombres et que vous ne voulez en tirer que quelques-uns, il est logique de les tracer chacun avec random.choice
et de les supprimer.
Mais ... pourquoi voulez-vous sélectionner des nombres dans une plage qui correspond au nombre d'éléments? Allez-vous utiliser le numéro pour sélectionner l'un des éléments? Ne fais pas ça ça fait de votre mieux pour rendre les choses trop compliquées. Si vous souhaitez sélectionner l'un des éléments, faites-le directement, à nouveau avec random.choice
.
Conservez une set
et supprimez un élément pris au hasard (avec choice
) jusqu'à ce que la liste soit vide:
s = set(range(1, 6))
import random
while len(s) > 0:
s.remove(random.choice(list(s)))
print(s)
Trois points donnent trois réponses différentes:
>>>
set([1, 3, 4, 5])
set([3, 4, 5])
set([3, 4])
set([4])
set([])
>>>
set([1, 2, 3, 5])
set([2, 3, 5])
set([2, 3])
set([2])
set([])
>>>
set([1, 2, 3, 5])
set([1, 2, 3])
set([1, 2])
set([1])
set([])
Créer la liste (modifiée):
count_list = range(1, N+1)
Sélectionnez un élément aléatoire:
import random
random.choice(count_list)