Множественное 'или' условие в 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':
Спасибо.
Ответы
Ответ 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 вернет первое значение "не-falsey" (или последнее, если все они ложны). Поскольку непустые строки не являются ложными, возвращается первая.