zahlen - verschachtelte liste python




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

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?


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 .


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 habe das getan, um es zum Laufen zu bringen:

import random
pick = ['Random','Random1','Random2','Random3']
print  (pick[int(random.random() * len(pick))])

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

Wenn Sie den Index brauchen, benutzen Sie einfach:

import random
foo = ['a', 'b', 'c', 'd', 'e']
print int(random.random() * len(foo))
print foo[int(random.random() * len(foo))]

random.choice macht das gleiche :)


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)

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)




random