Python中的多个“或”条件
我遇到了一点代码问题,在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':
谢谢。
2 个回答
15
你想要使用 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 会返回第一个“非假值”的结果(如果都是假值,就返回最后一个)。由于非空字符串被认为是非假值,所以第一个字符串被返回。
41
使用 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':