python zahlen Wie wähle ich zufällig einen Gegenstand aus einer Liste?




verschachtelte liste python (10)

Wir können dies auch mit Randint machen.

from random import randint
l= ['a','b','c']

def get_rand_element(l):
    if l:
        return l[randint(0,len(l)-1)]
    else:
        return None

get_rand_element(l)

Angenommen, ich habe die folgende Liste:

foo = ['a', 'b', 'c', 'd', 'e']

Was ist der einfachste Weg, um ein Objekt zufällig aus dieser Liste zu erhalten?


Dies ist der Code mit einer Variablen, die den Zufallsindex definiert:

import random

foo = ['a', 'b', 'c', 'd', 'e']
randomindex = random.randint(0,len(foo)-1) 
print (foo[randomindex])
## print (randomindex)

Dies ist der Code ohne die Variable:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print (foo[random.randint(0,len(foo)-1)])

Und das ist der Code auf die kürzeste und klügste Art, es zu tun:

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

(Python 2.7)


Verwenden Sie random.choice :

import random

foo = ['a', 'b', 'c', 'd', 'e']
print(random.choice(foo))

Für kryptographisch sichere Zufallsauswahl (z. B. zum Generieren einer Passphrase aus einer Wortliste) verwenden Sie die random.SystemRandom Klasse:

import random

foo = ['battery', 'correct', 'horse', 'staple']
secure_random = random.SystemRandom()
print(secure_random.choice(foo))

foo = ['a', 'b', 'c', 'd', 'e']
number_of_samples = 1

In Python 2:

random_items = random.sample(population=foo, k=number_of_samples)

In Python 3:

random_items = random.choices(population=foo, k=number_of_samples)

Wenn Sie nach dem Zufallsprinzip mehr als ein Element aus einer Liste auswählen oder ein Element aus einem Set auswählen random.sample stattdessen random.sample verwenden.

import random
group_of_items = {1, 2, 3, 4}               # a sequence or set will work here.
num_to_select = 2                           # set the number to select here.
list_of_random_items = random.sample(group_of_items, num_to_select)
first_random_item = list_of_random_items[0]
second_random_item = list_of_random_items[1] 

Wenn Sie nur ein einzelnes Element aus einer Liste ziehen, ist die Auswahl weniger klobig, da die Verwendung von sample die Syntax random.sample(some_list, 1)[0] anstelle von random.choice(some_list) .

Leider funktioniert die Auswahl nur für eine einzige Ausgabe von Sequenzen (wie Listen oder Tupeln). Obwohl random.choice(tuple(some_set)) eine Option sein kann, um ein einzelnes Element aus einem Set zu erhalten.


import random_necessary
pick = ['Miss','Mrs','MiSs','Miss']
print  pick [int(random_necessary.random_necessary() * len(pick))]

Ich hoffe, dass Sie diese Lösung hilfreich finden.


Falls Sie auch den Index benötigen:

foo = ['a', 'b', 'c', 'd', 'e']
from random import randrange
random_index = randrange(0,len(foo))
print foo[random_index]

Ich schlage ein Skript vor, um zufällig ausgewählte Gegenstände von einer Liste zu entfernen, bis sie leer ist:

Pflegen Sie ein set und entfernen Sie das zufällig ausgewählte Element (mit der 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([])

Wie wähle ich zufällig einen Gegenstand aus einer Liste?

Angenommen, ich habe die folgende Liste:

foo = ['a', 'b', 'c', 'd', 'e']  

Was ist der einfachste Weg, um ein Objekt zufällig aus dieser Liste zu erhalten?

Wenn Sie wirklich zufällig sein wollen , dann schlage ich vor, ein SystemRandom Objekt aus dem random mit der choice Methode zu verwenden:

>>> import random
>>> sr = random.SystemRandom()
>>> foo = list('abcde')
>>> foo
['a', 'b', 'c', 'd', 'e']

Und nun:

>>> sr.choice(foo)
'd'
>>> sr.choice(foo)
'e'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'b'
>>> sr.choice(foo)
'a'
>>> sr.choice(foo)
'c'
>>> sr.choice(foo)
'c'

Wenn Sie eine deterministische Pseudozufallsauswahl wünschen, verwenden Sie die choice (die tatsächlich eine gebundene Methode für ein Random Objekt ist):

>>> random.choice
<bound method Random.choice of <random.Random object at 0x800c1034>>

Es scheint zufällig, aber es ist tatsächlich nicht, was wir sehen können, wenn wir es wiederholt absetzen:

>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')
>>> random.seed(42); random.choice(foo), random.choice(foo), random.choice(foo)
('d', 'a', 'b')

Ab Python 3.6 können Sie das secrets Modul verwenden, das dem random für Kryptographie- oder Sicherheitsanwendungen vorzuziehen ist.

So drucken Sie ein zufälliges Element aus einer Liste:

import secrets
foo = ['a', 'b', 'c', 'd', 'e']
print(secrets.choice(foo))

So drucken Sie einen zufälligen Index:

print(secrets.randbelow(len(foo)))

Weitere Informationen finden Sie unter PEP 506 .







random