我想使用random.uniform
在float
之间生成[-2, 2]
,但不生成0
,这就是我在循环中执行的方式,
from random import uniform
flag = True
while flag:
if uniform(-2, 2) is not 0:
flag = False
我想知道有更好的方法吗?
欢呼声
答案 0 :(得分:1)
这更适用于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]
* 我不想把它称为嵌套,因为我觉得它属于略微不同的双列表理解。