【问题标题】:Instead of writing many ands how to short your code in pythonic way [duplicate]而不是编写许多ands如何以pythonic方式缩短代码[重复]
【发布时间】: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.0003240000000000000140.00032399999999999990656。如果你测试0.000324000000000000014 != 0.000324,你会得到False,但0.00032399999999999990656 != 0.000324True。您通常不想用!= 测试float 值。

标签: python python-3.x python-2.7


【解决方案1】:

将所有值放在一个列表中,不要签入。示例如下

sv= 0.000324
not_sv_list = [0.00002, 0.00003, 0.00004, 0.00005, 0.0002, 0.0003, 0.0004, 
        0.0005, 0.000003, 0.04, 0.000000090, 0.000005, 0.00003, 0.000000090, 0.0000003 ]
if sv not in not_sv_list:
    print (sv)

【讨论】:

  • 工作 100% 非常感谢
猜你喜欢
  • 2015-04-21
  • 2021-07-06
  • 2012-07-13
  • 2017-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
相关资源
最近更新 更多