【发布时间】:2018-05-30 17:56:36
【问题描述】:
sv= 0.000324
if sv != 0.00002 and 0.00003 and 0.00004 and 0.00005 and 0.0002 and 0.0003 and 0.0004 and 0.0005 and 0.000003 and 0.04 and 0.000000090 and 0.000005 and 0.00003 and 0.000000090 and 0.0000003:
print (sv)
有没有一种方法可以使这段代码更短或更pythonic,而不是编写许多ands或ors?
【问题讨论】:
-
你希望这段代码做什么?它实际上做的是
((sv != 0.000002)) and 0.00003) and 0.00004 …,所以最后,如果sv == 0.000002,则结果为False,否则0.0000003。 -
创建一个列表并执行
if sv not in list_ -
if sv not in (your, values, here):?一个集合甚至比一个列表/元组更好:if sv not in {your, values, here} -
使用集合可能比使用列表更好。它会快几纳秒,但更重要的是,您正在做的是概念性地询问“这个值是这组值的成员吗?”所以,
if sv not in {0.0002, 0.0003, <etc.>}: -
除了那些重复问题中解释的问题之外,您的真实代码可能还有另一个问题:您可能通过某种计算创建了
sv,而不仅仅是sv = 0.000324,对吧?在这种情况下,float中不能有精确的0.000324— 最接近的值是(大致)0.000324000000000000014和0.00032399999999999990656。如果你测试0.000324000000000000014 != 0.000324,你会得到False,但0.00032399999999999990656 != 0.000324是True。您通常不想用!=测试float值。
标签: python python-3.x python-2.7