如何使用random.sample()它总是生成数字

Vol*_*il3 -5 python random python-3.x

目标是给出开始和结束限制以及要生成的数字#.例如,我想在1-100之间生成100个随机数.

我怎样才能确保我没有ValueError异常?

我使用的代码是:

nums = random.sample(range(1000, 2000), 1999)
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 7

错误很明显:

>>> nums = random.sample(range(1000, 2000), 1999)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/mjpieters/Development/venvs/stackoverflow-3.6/lib/python3.6/random.py", line 317, in sample
    raise ValueError("Sample larger than population or is negative")
ValueError: Sample larger than population or is negative
Run Code Online (Sandbox Code Playgroud)

range()唯一拥有1000个元素:

>>> len(range(1000, 2000))
1000
Run Code Online (Sandbox Code Playgroud)

random.sample()从输入序列中获取唯一值,因此len(input)最初只能获取元素.您的只有1000个唯一值range(),您无法从中随机选择近2000个唯一值.

如果要在两个值之间生成100个随机数,请不要使用sample().使用列表理解和random.randrange()random.randint():

[random.randint(1, 100) for _ in range(100)]
Run Code Online (Sandbox Code Playgroud)

这将产生100个随机数,允许重复.

即使不允许重​​复,要从N的群体中生成N个元素的样本,最好使用随机shuffle:

# the numbers 1 - 101, randomly distributed
result = list(range(1, 101))
random.shuffle(result)
Run Code Online (Sandbox Code Playgroud)