这就是我尝试过的:
numbers_to_test = []
for i in range(0, 10):
x = round(random.uniform(-10000000, 10000000), 0)
numbers_to_test.append(x)
这很好用,但是,我需要排除-10000到10000之间的数字,并且列表中仍然有10个项目。我该如何实现?
我认为我可以使用
limits = range(-10000000, -10000) + range(10000, 10000000)
x = random.choice(limits)
但这会引发错误:
limits = []
for i in range(0, 10):
> limits = range(-10000000, -10000) + range(10000, 10000000)
E TypeError: unsupported operand type(s) for +: 'range' and 'range'
答案 0 :(得分:2)
您可以创建两个单独的范围,并有一个概率进入一个范围,如下所示:
import random
lower_range = range(-10000000, -10000)
upper_range = range(10000, 10000000)
# Take from lower range
if random.random() < 0.5:
lo = lower_range.start
hi = lower_range.stop
else:
lo = upper_range.start
hi = upper_range.stop
round(random.uniform(lo, hi), 0)
这样做的好处是您不需要在内存中存储巨大的list
对象,而只需存储range
。
答案 1 :(得分:1)
您可以使用随机库中的choice()函数。试试这个解决方案:
from random import choice
numbers_to_test = []
for i in range(0, 10):
x=choice([i for i in range(-10000000, 10000000) if i not in range(-10000,10000)])
numbers_to_test.append(x)
答案 2 :(得分:0)
更改限制定义:
In [2]: limits = list(range(-10000000, -10000)) + list(range(10000, 10000000))
In [3]: from random import choice
In [4]: x = random.choice(limits)
这将起作用。您试图添加两个不可能的范围。您需要先将范围转换为列表,然后再添加。