73

これは私が思うことをしますか?そうだと私には思えます。確かにお願いしています。

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
4

7 に答える 7

73

アクセスは1回だけ実行されるため、これは同等ですが、等しくはありません。Pythonは関係演算子を自然にチェーンします(inとを含むis)。

わずかな違いを示す最も簡単な方法:

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

print()常にを返すので、ここでsNoneを比較するNoneだけなので、結果は常にTrueですが、2番目のケースでprint(2)は2回呼び出されるため2、出力に2つのsが取得され、最初のケースでは結果が使用されます。両方の比較で、1回だけ実行されます。

副作用のない純粋関数を使用する場合、2つの操作はまったく同じになりますが、それ以外の点では少し異なります。

于 2012-12-10T17:27:57.123 に答える
16

はい。ただし、比較が連鎖している場合、共通の式は1回評価され、使用している場合andは2回評価されます。どちらの場合も、最初の比較がfalseの場合、2番目の比較は評価されません。ドキュメントの例:

比較は任意に連鎖させることができます。たとえば、x <y<=zはx<yおよびy<=zと同等ですが、yは1回だけ評価されます(ただし、どちらの場合も、x <yが見つかった場合、zはまったく評価されません。偽であるために)。

于 2012-12-10T17:31:56.617 に答える
13

他の人が答えたように、答えはイエスです。ただし、括弧を追加することに注意してください。例えば:

>>> 1 == 2 == 0
False
>>> (1 == 2) == 0
True

2番目のケースでは、Pythonでブール値と整数の比較が可能であるため、に(1 == 2)評価されてからFalse、にFalse == 0評価されます。True

同じく:

>>> 0 == 0 == 1
False
>>> (0 == 0) == 1
True
于 2018-10-23T16:45:36.207 に答える
6

はい。それで合っています ....

あなたもすることができます

5 > x > 1

また

1 < x < 5
于 2012-12-10T17:28:12.007 に答える
3

セットコレクションを使用して、同等性をテストできます

>>> a, b, c = 2, 2, 2
>>> len({a, b, c}) == 1
True
>>> a, b, c = 2, 2, 3
>>> len({a, b, c}) == 1
False
于 2018-12-04T13:01:44.950 に答える
2

はい、Pythonの内部では、比較演算子はtrueもfalseも返しません。代わりに、「比較結果」オブジェクトを返します(クラス名を思い出せません。かなり過去のものです)。このオブジェクトは_ lt _ _ gt_提供します。 、_ eq _ etcなどのメソッドを使用して、最終結果に対して「責任」を持ちます(「比較結果」は、ステートメントの最後でTrueまたはFalseにキャストされます)。これは、Pythonが提供するセマンティック制御の魔法です:)

于 2012-12-10T17:42:11.627 に答える
1

==と!=をチェーンすることもできるようです:

>>> a = b = c = 1
>>> a == b == c
True
>>> a == b == c == 1
True
>>> a == b == c == 2
False
>>> a == b == c != 2
True
>>> a == b == c != 1
False
>>> 
于 2019-02-28T15:58:49.017 に答える