randrange from float choices python list random

python - from - randrange



¿Cómo hacer una lista de n números en Python y seleccionar aleatoriamente cualquier número? (8)

He tomado una cuenta de algo y salió a N.

Ahora me gustaría tener una lista con números de 0 a N en ella.

Ejemplo:

N = 5

entonces, count_list = [1, 2, 3, 4, 5]

¿Cómo podría hacer eso?

Además, una vez que haya creado la lista, me gustaría seleccionar aleatoriamente un número de esa lista y usar ese número.

Después de eso, me gustaría seleccionar otro número de los números restantes de la lista (N-1) y luego usarlo también.

Esto va en la lista está vacía.

¿Cómo puedo hacer esto?


Después de eso, me gustaría seleccionar otro número de los números restantes de la lista (N-1) y luego usarlo también.

Entonces, podría decirse que realmente no desea crear una lista de números del 1 al N con el único fin de elegir uno (¿por qué no pedir un número aleatorio en ese rango directamente, en lugar de crearlo explícitamente para elegir?), Pero en lugar de barajar tal lista. Afortunadamente, el módulo random tiene cubierto: solo use random.shuffle .

Por supuesto, si tienes una gran lista de números y solo quieres dibujar unos pocos, entonces ciertamente tiene sentido dibujar cada uno usando random.choice y eliminarlo.

Pero ... ¿por qué desea seleccionar números de un rango que corresponda al recuento de algunos elementos? ¿Vas a utilizar el número para seleccionar uno de los elementos? No hagas eso eso está haciendo todo lo posible para hacer las cosas demasiado complicadas. Si desea seleccionar uno de los elementos, hágalo directamente - nuevamente con random.choice .


Crear la lista (editada):

count_list = range(1, N+1)

Seleccionar elemento aleatorio:

import random random.choice(count_list)


En cuanto a la primera parte:

>>> N = 5 >>> count_list = [i+1 for i in xrange(N)] >>> count_list [1, 2, 3, 4, 5] >>>

En cuanto al segundo, lee 9.6. aleatorio - Genera números pseudoaleatorios .

>>> from random import choice >>> a = choice(count_list) >>> a 1 >>> count_list.remove(a) >>> count_list [2, 3, 4, 5]

Esa es la idea general.

Por cierto, puede que también te interese leer una selección aleatoria de elementos en una lista, sin repeticiones (receta de Python) .

Hay algunas implementaciones de selección aleatoria rápida.


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

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

Tres carreras dan tres respuestas diferentes:

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


No necesitas contar cosas si quieres elegir un elemento aleatorio. Solo usa random.choice() y pasa tu iterable:

import random items = [''foo'', ''bar'', ''baz''] print random.choice(items)

Si realmente tiene que contarlos, use random.randint(1, count+1) .


Puedes crear la enumeración de los elementos por algo como esto:

mylist = list(xrange(10))

Luego puedes usar la función random.choice para seleccionar tus artículos:

import random ... random.choice(mylist)

Como Asim Ihsan declaró correctamente, mi respuesta no abordó el problema completo del OP. Para eliminar los valores de la lista, simplemente se puede llamar a list.remove() :

import random ... value = random.choice(mylist) mylist.remove(value)

Como señaló Takataka, la función incorporada xrange se renombró a range en Python 3.


Puedes probar este código

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


Puedes usar:

import random random.choice(range(n))

o:

random.choice(range(1,n+1))

Si lo quieres de 1 a n y no de 0 .