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
(后者更所以很明显我们是在比较一个浮点数和一个浮点数)。
因为您将 float
与 int
进行比较,所以它们永远不会是同一个项目。此外,使用 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]
*我不想称它为嵌套,因为我觉得它属于稍微不同的双列表理解。
我想用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
(后者更所以很明显我们是在比较一个浮点数和一个浮点数)。
因为您将 float
与 int
进行比较,所以它们永远不会是同一个项目。此外,使用 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]
*我不想称它为嵌套,因为我觉得它属于稍微不同的双列表理解。