Python random.uniform 不生成 0

Python random.uniform not generate 0

我想用random.uniform[-2, 2]之间生成一个float,但不生成0,这就是我在循环中做的,

from random import uniform

flag = True

while flag:
    if uniform(-2, 2) is not 0:
        flag = False

我想知道有没有更好的方法?

干杯

这更多是为了 Code Review,但非常简单:

from random import uniform

while True:
    if uniform(-2, 2) != 0.0:
        break

可能是执行此操作的更 Pythonic / 标准方法(标准,因为这种模式也出现在其他语言中)。

很少需要 flag 变量来跳出 (while) 循环。也许在使用双循环时。

注意:我把你的is not改成了!=,你的0改成了0.0(后者更所以很明显我们是在比较一个浮点数和一个浮点数)。
因为您将 floatint 进行比较,所以它们永远不会是同一个项目。此外,使用 is 比较数字是个坏主意:

>>> 2*3 is 6  # this may work, but don't rely on it
True
>>> 10*60 is 600  # this obviously doesn't work
False
>>> 0 is 0   # sure, this works...
True
>>> 0.0 is 0  # but this doesn't: float vs int
False

当然,要回答实际问题,是否还有其他方法可以生成这些随机数:可能有十几种。

  • 在列表推导中使用列表推导*:

    [val for val in [uniform(-2, 2) for i in range(10)] if val != 0]
    
  • 使用 numpy:

    vals = uniform(-2, 2, 10)
    vals = vals[vals!=0]
    

*我不想称它为嵌套,因为我觉得它属于稍微不同的双列表理解。