Multiple 'or' condition in Python

katze picture katze · Mar 10, 2014 · Viewed 93.7k times · Source

I have a little code issue and it works with IDLE and not with Eclipse, can I write this :

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

instead of this :

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

Thank you.

Answer

Martijn Pieters picture Martijn Pieters · Mar 10, 2014

Use not in and a sequence:

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

which tests against a tuple, which Python will conveniently and efficiently store as one constant. You could also use a set literal:

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

but only more recent versions of Python (Python 3.2 and newer) will recognise this as an immutable constant. This is the fastest option for newer code.

Because this is one character, you could even use a string:

if fields[9] not in 'ADENR':