2012-12-10 9 views
28

これは私の考えていることですか?それは私のように思えます。私は確信しています。3つの値の等価性をテストする

if n[i] == n[i+1] == n[i+2]: 
    return True 

これらは同じですか?

if n[i] == n[i+1] and n[i+1] == n[i+2]: 
    return True 
+2

これは正しいです。 –

+0

重複:http://stackoverflow.com/questions/13792604/usage-of-the-operator-for-three-objects/13792615#13792615 –

答えて

25

アクセスは、一度だけ実行されるので、それは、等価にそれに等しくありません。 Pythonはリレーショナル演算子を自然に連想します(inisを含む)。

若干の差異表示する最も簡単な方法:

>>> print(1) == print(2) == print(3) 
1 
2 
3 
True 
>>> print(1) == print(2) and print(2) == print(3) 
1 
2 
2 
3 
True 
+3

これは同じではないことに注意する価値があります。一方が動作し、他方が失敗するシナリオ( 'n'は、アクセス後に' n [i + 1] 'の値を変更するオブジェクトです)。編集:私はその違いを示す例を編集しました。 –

3

はい、あなたが正しいですが....

あなたも

5 > x > 1 

または

1 < x < 5 
6
を行うことができます

しかし、比較nsは共通式に一度評価され、andを使用すると2回評価されます。最初のものはdocsから偽、例えばあれば両方の場合において、第2の比較が評価されていない。

比較は任意に連鎖することができ、例えば、< Y < = Zは、x < yに 等価であり、yはx < = zただし、yは1回だけ評価されます(ただし、 の場合は、x <が偽であると評価されます)。

2

うん、Pythonの内部での比較演算子の戻りも真でもない偽のは、彼らが代わりに「比較結果」オブジェクトを(クラス名を覚えていないことができ、それは過去にかなりあった)を返し、このオブジェクトは、を提供します_ LT __ GT __ EQ_などなどの方法および最終結果のための「責任」(及び「比較結果」になるの終了時に真または偽にキャストされていますステートメント)。それは意味制御の魔法ですPythonはあなたに提供します:)

関連する問題