1. ホーム
  2. python

[解決済み] (1 in [1,0] == True) はなぜ False と評価されるのでしょうか?

2022-04-27 04:21:09

質問

の答えを見ていたら この質問 自分の回答が理解できていないことがわかった。

これがどのように解析されているのか、よく理解できません。なぜ2番目の例はFalseを返すのでしょうか?

>>> 1 in [1,0]             # This is expected
True
>>> 1 in [1,0] == True     # This is strange
False
>>> (1 in [1,0]) == True   # This is what I wanted it to be
True
>>> 1 in ([1,0] == True)   # But it's not just a precedence issue!
                           # It did not raise an exception on the second example.

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    1 in ([1,0] == True)
TypeError: argument of type 'bool' is not iterable

よろしくお願いします。私は本当に明白な何かを見逃しているに違いないと思います。


リンク先の重複と微妙に違うと思うのですが。

Pythonで0 < 0 == 0という式はなぜFalseを返すのですか? .

どちらの質問も、式に対する人間の理解力に関係するものです。この表現を評価する方法は、(私の中では)2通りあるように思えました。もちろん、どちらも正しいとは言えませんが、私の例では、最後の解釈は不可能です。

を見てみると 0 < 0 == 0 は、それぞれの半分が評価され、式として意味をなすことが想像できます。

>>> (0 < 0) == 0
True
>>> 0 < (0 == 0)
True

ということで、なぜこのリンクが評価されるのかに答えます。 False :

>>> 0 < 0 == 0
False

しかし、私の例では 1 in ([1,0] == True) は表現として意味をなさないので、2つの(確かに間違った)解釈があるのではなく、1つしかないと思われます。

>>> (1 in [1,0]) == True

解決方法は?

Pythonはここで実際に比較演算子の連鎖を適用しています。 式は次のように変換されます。

(1 in [1, 0]) and ([1, 0] == True)

というのは、明らかに False .

これは、次のような表現でも起こります。

a < b < c

に変換されます。

(a < b) and (b < c)

(評価なし b を2回繰り返す)。

をご覧ください。 Python言語ドキュメント をご覧ください。