这是Code Review更多的东西,但是很简单:
from random import uniform
while True:
if uniform(-2, 2) != 0.0:
break
是可能做到这一点(标准更Python /标准的方式,在这种模式在其他语言中出现以及)。
很少有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]
*我不想把它称为嵌套的,因为我觉得属于稍微不同的双列表理解。