我想生成一组x个唯一的随机数,并在Python中对它们进行排序。例如: 范围(1000,10000) x = 100
我已经想出了随机导入并使用random.randrange方法,然后循环获取100个随机数,最后对它们进行排序。
但是,我不知道如何获得唯一的数字(这样它们不重复) - 我应该验证每个循环吗?或者还有其他更简单的方法吗?我应该如何对它们进行排序?
谢谢你们!
答案 0 :(得分:9)
numbers = random.sample(xrange(1000, 10000), 100) # or `range` in Python 3
排序部分很简单 - 使用list.sort
方法。
numbers.sort()
默认情况下,它会将它从最小的数字排序到最大的数字,但它需要一个可选的key
参数来确定要对其进行排序的内容。
还有一个sorted
函数,它不会就地修改列表,而是返回一个已排序的列表。
numbers_sorted = sorted(numbers)
这也有一个可选的key
参数。
答案 1 :(得分:0)
more_itertools
实现random_combinations
itertools配方,如果给定排序输入,则返回r
个排序随机数。
import more_itertools as mit
mit.random_combination(range(1000, 10000), r=100)
# (1016, 1112, 1233, 1367, 1446, 1460, 1518, 1807, 1832, 1956, ...)
这与random.sample
不同,后者返回未排序的结果。
<强>详情
查看食谱,我们可以看到为什么要建立此订单。
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()
具有固有的排序,并成为从中选择随机元素的pool
。尽管索引是随机选择的,但它们稍后会被排序。由于pool
和indices
都已排序,因此结果也会排序。
总之,除了为您处理排序外,这与@Volatility的答案相同。
Cavaet :random_combinations
要求iterable的长度超过r
的值,否则会引发错误。