Genera un conjunto de números aleatorios ordenados de un rango específico

Me gustaría generar un conjunto de x números aleatorios únicos y ordenarlos en Python. Por ejemplo: rango (1000, 10000) x = 100

Descubrí importar al azar y usar el método random.randrange, luego hacer un bucle para obtener 100 números aleatorios y, al final, ordenarlos.

Sin embargo, no sé cómo obtener números únicos (de manera que no se repitan). ¿Debo validar todos y cada uno de los bucles? ¿O hay alguna otra forma más fácil de hacerlo? ¿Y cómo debo ordenarlos?

Gracias a todos!

Use random.sample

 numbers = random.sample(xrange(1000, 10000), 100) # or `range` in Python 3 

La parte de clasificación es fácil: use el método list.sort .

 numbers.sort() 

Por defecto, esto lo ordenará desde el número más pequeño hasta el más grande, pero toma un argumento key opcional que determina en qué ordenarlo.

También hay una función sorted que no modifica una lista en el lugar, sino que devuelve una lista ordenada.

 numbers_sorted = sorted(numbers) 

Esto también tiene un argumento key opcional.

more_itertools implementa la receta itertools de random_combinations aleatorias, que devuelve r números aleatorios ordenados, si se le da una entrada ordenada.

 import more_itertools as mit mit.random_combination(range(1000, 10000), r=100) # (1016, 1112, 1233, 1367, 1446, 1460, 1518, 1807, 1832, 1956, ...) 

Esto es a diferencia de random.sample , que devuelve un resultado no clasificado.


Detalles

Mirando la receta, podemos ver por qué se establece este orden.

De las recetas de itertools :

 def random_combination(iterable, r): """Return a random *r* length subsequence of the elements in *iterable*. >>> random_combination(range(5), 3) # doctest:+SKIP (2, 3, 4) This equivalent to taking a random selection from ``itertools.combinations(iterable, r)``. """ pool = tuple(iterable) n = len(pool) indices = sorted(sample(range(n), r)) return tuple(pool[i] for i in indices) 

range() se clasifica de forma inherente y se convierte en el pool desde el que se seleccionan los elementos aleatorios. Aunque los índices se seleccionan aleatoriamente, se ordenan más tarde. Como la pool y los indices están ordenados, los resultados también se ordenan.

En resumen, esto hace lo mismo que la respuesta de @ Volatility, excepto que la clasificación se maneja por usted.

Cavaet : random_combinations requiere que la longitud del iterable exceda el valor de r , de lo contrario se random_combinations un error.