Ich habe etwas gezählt und es kam zu N.
Nun möchte ich eine Liste mit 0 bis N-Nummern haben.
Beispiel:
N = 5
dann count_list = [1, 2, 3, 4, 5]
Wie könnte ich das schaffen?
Sobald ich die Liste erstellt habe, möchte ich eine Nummer aus dieser Liste zufällig auswählen und diese Nummer verwenden.
Danach möchte ich aus den restlichen Nummern der Liste (N-1) eine andere Nummer auswählen und diese dann auch verwenden.
Daraufhin ist die Liste leer.
Wie kann ich das machen?
Sie können die Aufzählung der Elemente folgendermaßen erstellen:
mylist = list(xrange(10))
Dann können Sie die random.choice
-Funktion verwenden, um Ihre Artikel auszuwählen:
import random
...
random.choice(mylist)
Wie Asim Ihsan richtig feststellte, ging meine Antwort nicht auf das gesamte Problem des OP ein. Um die Werte aus der Liste zu entfernen, kann einfach list.remove()
aufgerufen werden:
import random
...
value = random.choice(mylist)
mylist.remove(value)
Wie Takataka darauf hinwies, wurde die eingebaute Funktion xrange
in Python 3 in range
umbenannt.
Sie können diesen Code ausprobieren
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'
Wie für den ersten Teil:
>>> N = 5
>>> count_list = [i+1 for i in xrange(N)]
>>> count_list
[1, 2, 3, 4, 5]
>>>
Zum zweiten lesen Sie 9.6. random - Generiere Pseudo-Zufallszahlen.
>>> from random import choice
>>> a = choice(count_list)
>>> a
1
>>> count_list.remove(a)
>>> count_list
[2, 3, 4, 5]
Das ist die allgemeine Idee.
Übrigens könnten Sie auch interessiert sein beim Lesen Zufällige Auswahl von Elementen in einer Liste ohne Wiederholungen (Python-Rezept).
Es gibt einige Implementierungen der schnellen Zufallsauswahl.
Sie müssen nichts zählen, wenn Sie ein zufälliges Element auswählen möchten. Verwenden Sie einfach random.choice()
und übergeben Sie Ihre iterable:
import random
items = ['foo', 'bar', 'baz']
print random.choice(items)
Wenn Sie sie wirklich zählen müssen, verwenden Sie random.randint(1, count+1)
.
Sie können verwenden:
import random
random.choice(range(n))
oder:
random.choice(range(1,n+1))
wenn Sie es von 1
zu n
und nicht von 0
wollen.
Danach möchte ich aus den restlichen Nummern der Liste (N-1) eine andere Nummer auswählen und diese dann auch verwenden.
Dann möchten Sie wahrscheinlich nicht wirklich eine Liste von Zahlen von 1 bis N erstellen, nur um eine zu wählen (fragen Sie einfach nach einer Zufallszahl in diesem Bereich, anstatt sie explizit als Auswahl zu erstellen?), Sondern stattdessen eine solche Liste zu mischen. Glücklicherweise haben Sie auch das Modul random
abgedeckt: Verwenden Sie einfach random.shuffle
.
Wenn Sie eine große Anzahl von Zahlen haben und nur einige Zahlen zeichnen möchten, ist es natürlich sinnvoll, diese mit random.choice
zu zeichnen und zu entfernen.
Aber ... warum möchten Sie Zahlen aus einem Bereich auswählen, der der Anzahl einiger Elemente entspricht? Verwenden Sie die Nummer, um eines der Elemente auszuwählen? Mach das nicht; Das ist alles, um die Dinge zu kompliziert zu machen. Wenn Sie einen der Artikel auswählen möchten, tun Sie dies direkt - erneut mit random.choice
.
Behalten Sie eine set
und entfernen Sie ein zufällig ausgewähltes Element (mit choice
), bis die Liste leer ist:
s = set(range(1, 6))
import random
while len(s) > 0:
s.remove(random.choice(list(s)))
print(s)
Drei Läufe geben drei verschiedene Antworten:
>>>
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([])
Erstellen Sie die Liste (bearbeitet):
count_list = range(1, N+1)
Zufälliges Element auswählen:
import random
random.choice(count_list)