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)
错误很明显:
>>> 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)
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |