Это еще что-то для 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]
* Я не хочу называть это вложенным, так как я чувствую, что это относится к немного отличающемуся пониманию двойного списка.