生成不包含数字范围的随机浮点数

时间:2020-04-13 15:44:03

标签: python python-3.x random

这就是我尝试过的:

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'

3 个答案:

答案 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)

这将起作用。您试图添加两个不可能的范围。您需要先将范围转换为列表,然后再添加。