Python random.uniform not generate 0 -
i want use random.uniform
generate float
in between [-2, 2]
, not generate 0
, how in loop,
from random import uniform flag = true while flag: if uniform(-2, 2) not 0: flag = false
i wondering there better way it?
cheers
this more code review, briefly:
from random import uniform while true: if uniform(-2, 2) != 0.0: break
is more pythonic / standard way (standard, in pattern occurs in other languages well).
it's rare flag
variable necessary break out of (while) loop. perhaps when using double loop.
note: changed is not
!=
, , 0
0.0
(the latter more it's clear we're comparing float float).
because you're comparing float
int
, they'll never same item. besides, comparing numbers using is
bad idea:
>>> 2*3 6 # may work, don't rely on true >>> 10*60 600 # doesn't work false >>> 0 0 # sure, works... true >>> 0.0 0 # doesn't: float vs int false
of course, answer actual question if there other ways generate random numbers: dozen.
with list comprehension inside list comprehension*:
[val val in [uniform(-2, 2) in range(10)] if val != 0]
using numpy:
vals = uniform(-2, 2, 10) vals = vals[vals!=0]
* don't want call nested, since feel belongs different double list comprehension.
Comments
Post a Comment