web-dev-qa-db-de.com

Wie erstelle ich eine Liste von n Zahlen in Python und wähle zufällig eine beliebige Zahl?

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?

23
Sunny

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.

33
Constantinius

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'
7
Tibo

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.

1
Gandi

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).

1
patrys

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.

1
Guy

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.

1
Karl Knechtel

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([])
0
octoback

Erstellen Sie die Liste (bearbeitet):

count_list = range(1, N+1)

Zufälliges Element auswählen:

import random
random.choice(count_list)
0
pvoosten