【问题标题】:Multiple 'or' condition in Python [duplicate]Python中的多个“或”条件[重复]
【发布时间】:2014-04-13 19:29:18
【问题描述】:

我有一点代码问题,它适用于 IDLE 而不是 Eclipse,我可以这样写吗:

if  fields[9] != ('A' or 'D' or 'E' or 'N' or 'R'):

而不是这个:

if  fields[9] != 'A' and fields[9] != 'D' and fields[9] != 'E' and fields[9] != 'N' and fields[9] != 'R':

谢谢。

【问题讨论】:

    标签: python conditional-statements multiple-conditions


    【解决方案1】:

    使用not in 和一个序列:

    if fields[9] not in ('A', 'D', 'E', 'N', 'R'):
    

    它针对一个元组进行测试,Python 将方便有效地将其存储为一个常量。您还可以使用集合文字:

    if fields[9] not in {'A', 'D', 'E', 'N', 'R'}:
    

    但只有更新的 Python 版本(Python 3.2 和更新版本)才能将其识别为不可变常量。对于较新的代码,这是最快的选择。

    因为这是一个字符,你甚至可以使用一个字符串:

    if fields[9] not in 'ADENR':
    

    【讨论】:

      【解决方案2】:

      您想要in 运算符:

      if fields[9] not in 'ADENR':
          ...
      

      或者,您可以使用any:

      if not any(fields[9] == c for c in 'ADENR'):
          ...
      

      或者,或者,all,它可能与原版有更多相同的形式:

      if all(fields[9] != c for c in 'ADENR'):
          ...
      

      顺便说一句:

      if x != ('A' or 'B' or 'C'):
      

      其实和说的一样:

      if x != 'A':
      

      因为'A' or 'B' or 'C' 的计算结果为'A'(试试看!)。原因是因为使用or,python 将返回第一个“非假”值(或者如果它们都是假的,则返回最后一个)。由于非空字符串是非假的,因此返回第一个。

      【讨论】:

        猜你喜欢
        • 2013-09-14
        • 1970-01-01
        • 2016-09-20
        • 2015-03-30
        • 2013-06-26
        • 2018-12-22
        • 2014-01-28
        • 1970-01-01
        相关资源
        最近更新 更多