numeros numero lista libreria letras imprimir generar codigo asignar aleatorios aleatorio aleatorias aleatoria python list random

libreria - lista de numeros aleatorios en python



¿Cómo seleccionar aleatoriamente un elemento de una lista? (15)

Supongamos que tengo la siguiente lista:

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

¿Cuál es la forma más sencilla de recuperar un elemento al azar de esta lista?


¿Cómo seleccionar aleatoriamente un elemento de una lista?

Supongamos que tengo la siguiente lista:

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

¿Cuál es la forma más sencilla de recuperar un elemento al azar de esta lista?

Si desea que sea casi aleatorio , sugiero usar un objeto SystemRandom del módulo random con el método de 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''

Y ahora:

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

Si desea una selección pseudoaleatoria determinística, use la función de choice (que en realidad es un método enlazado en un objeto 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'')

Parece aleatorio, pero en realidad no lo es, lo que podemos ver si lo reiniciamos repetidamente:

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


A partir de Python 3.6 puede utilizar el módulo de secrets , que es preferible al módulo random para criptografía o usos de seguridad.

Para imprimir un elemento aleatorio de una lista:

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

Para imprimir un índice aleatorio:

s=set(range(1,6)) import random while len(s)>0: s.remove(random.choice(list(s))) print(s)

Para más detalles, ver PEP 506 .


El siguiente código muestra si necesita producir los mismos artículos. También puede especificar cuántas muestras desea extraer.
El método de sample devuelve una nueva lista que contiene elementos de la población y deja la población original sin cambios. La lista resultante está en orden de selección, de modo que todos los sub-cortes también serán muestras aleatorias válidas.

from random import * library = ["New York", "Berlin", "Rome"] for x in range (10): i = randrange(0,3) print(library[i])


Este es el código con una variable que define el índice aleatorio:

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

Este es el código sin la variable:

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

Y este es el código de la forma más rápida e inteligente de hacerlo:

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

(Python 2.7)


Hice esto para que funcione:

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


Propongo un script para eliminar los elementos recogidos al azar de una lista hasta que esté vacío:

Mantenga un set y elimine el elemento seleccionado aleatoriamente (con la choice ) hasta que la lista esté vacía.

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

Tres carreras dan tres respuestas diferentes:

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


Si desea seleccionar aleatoriamente más de un elemento de una lista, o seleccionar un elemento de un conjunto, recomiendo usar random.sample en random.sample lugar.

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]

Sin embargo, si solo está extrayendo un solo elemento de una lista, la opción es menos torpe, ya que usar sample tendría la sintaxis random.sample(some_list, 1)[0] lugar de random.choice(some_list) .

Sin embargo, desafortunadamente, la elección solo funciona para una única salida de secuencias (como listas o tuplas). Aunque random.choice(tuple(some_set)) puede ser una opción para obtener un solo elemento de un conjunto.

EDITAR: Usando Secretos

Como muchos han señalado, si necesita muestras pseudoaleatorias más seguras, debe usar el módulo de secretos:

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


Si necesitas el índice solo usa:

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

random.choice hace lo mismo :)


Si también necesita el índice, use random.randrange

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


También podemos hacer esto 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'']


Una solución fácil si buscas algo como esto:

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


Use random.choice :

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

Para las opciones aleatorias seguras criptográficamente (por ejemplo, para generar una frase de contraseña a partir de una lista de palabras), use la clase random.SystemRandom :

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


solución numpy.random.choice : numpy.random.choice

Para esta pregunta, funciona igual que la respuesta aceptada ( import random; random.choice() ), pero la agregué porque el programador ya puede haber importado numpy (como yo) y también hay algunas diferencias entre los dos métodos que puede referirse a su caso de uso real.

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

Para reproducibilidad, puedes hacer:

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

Para muestras de uno o más elementos , devueltos como una array , pase el argumento de 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))]

Espero que encuentre útil esta solución.


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

En Python 2:

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

En Python 3:

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