web-dev-qa-db-ja.com

Pythonの複数の 'or'条件

私は少しコードの問題があり、EclipseではなくIDLEで動作します、これを書くことができます:

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':

ありがとうございました。

17
katze

つかいます not inおよびシーケンス:

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

タプルに対してテストするwhich Pythonは、便利で効率的に1つの定数として格納されます。セットリテラルを使用することもできます。

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

ただし、Python( Python 3.2 以降)の最新バージョンのみが、これを不変定数として認識します。これは、新しいコードの最速オプションです。

これは1文字なので、文字列を使用することもできます。

if fields[9] not in 'ADENR':
32
Martijn Pieters

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は最初の「偽でない」値(またはすべて偽である場合は最後の値)を返すからです。)偽でない場合、最初のものが返されます。

10
mgilson