pyplot - title matplotlib python




Come selezionare casualmente un elemento da un elenco? (10)

Supponiamo di avere il seguente elenco:

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

Qual è il modo più semplice per recuperare un elemento a caso da questo elenco?


Come selezionare casualmente un elemento da un elenco?

Supponiamo di avere il seguente elenco:

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

Qual è il modo più semplice per recuperare un elemento a caso da questo elenco?

Se vuoi essere veramente casuale , ti suggerisco di usare un oggetto SystemRandom dal modulo random con il metodo choice :

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

E adesso:

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

Se si desidera una selezione pseudocasuale deterministica, utilizzare la funzione choice (che in realtà è un metodo associato su un oggetto Random ):

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

Sembra casuale, ma in realtà non lo è, che possiamo vedere se lo abbiamo ripetutamente ripetuto:

import numpy as np    
np.random.choice(foo) # randomly selects a single item

A partire da Python 3.6 è possibile utilizzare il modulo dei secrets , che è preferibile al modulo random per la crittografia o gli usi di sicurezza.

Per stampare un elemento casuale da un elenco:

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

Per stampare un indice casuale:

s=set(range(1,6))
import random

while len(s)>0:
  s.remove(random.choice(list(s)))
  print(s)

Per dettagli, consultare PEP 506 .


L'ho fatto per farlo funzionare:

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

Possiamo anche farlo usando randint.

import random as random
random.seed(0)  # don't use seed function, if you want different results in each run
print(random.sample(foo,3))  # 3 is the number of sample you want to retrieve

Output:['d', 'e', 'a']

Questo è il codice con una variabile che definisce l'indice casuale:

import random

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

Questo è il codice senza la variabile:

import random

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

E questo è il codice nel modo più breve e più intelligente per farlo:

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

(python 2.7)


Se hai bisogno anche dell'indice, usa random.randrange

from random import randrange
random_index = randrange(len(foo))
print(foo[random_index])

Una soluzione semplice se stai cercando qualcosa di simile:

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

Usa random.choice :

import random

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

Per le scelte casuali crittograficamente sicure (ad esempio per generare una passphrase da un elenco di parole), utilizzare la classe random.SystemRandom :

import random

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

soluzione numpy.random.choice : numpy.random.choice

Per questa domanda, funziona come la risposta accettata ( import random; random.choice() ), ma l'ho aggiunta perché il programmatore potrebbe aver già importato numpy (come me) e anche ci sono alcune differenze tra i due metodi che potrebbe riguardare il tuo caso d'uso effettivo.

np.random.seed(123)
np.random.choice(foo) # first call will always return 'c'

Per la riproducibilità, puoi fare:

np.random.choice(foo, 5)          # sample with replacement (default)
np.random.choice(foo, 5, False)   # sample without replacement

Per i campioni di uno o più elementi , restituiti come array , passare l'argomento size :

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)

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

Spero che tu trovi questa soluzione utile.





random