Python中有多个'或'条件

时间:2014-03-10 15:35:40

标签: python conditional-statements multiple-conditions

我有一点代码问题,它适用于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 个答案:

答案 0 :(得分:28)

使用not in和序列:

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

对元组进行测试,Python将方便有效地存储为一个常量。您还可以使用set literal:

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

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

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

if fields[9] not in 'ADENR':

答案 1 :(得分:10)

您需要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将返回第一个“非假名”值(如果它们都是假的,则返回最后一个)。由于非空字符串是非假的,因此返回第一个字符串。