【问题标题】: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 将返回第一个“非假”值(或者如果它们都是假的,则返回最后一个)。由于非空字符串是非假的,因此返回第一个。