2017-07-19 10 views
15
>>> item = 2 
>>> seq = [1,2,3] 
>>> print (item in seq) 
True 
>>> print (item in seq is True) 
False 

2番目のprint文の出力がFalseの理由は何ですか?`in`演算子からの予期しない結果 -

+1

これは、Pythonが式を評価する方法のためかもしれません。 'print(item in seq)is True)'を使用したいかもしれません。 –

答えて

23

inisは、Pythonの比較演算子です。その点に関しては、たとえば<==と同じです。一般的に、

expr1 <comparison1> expr2 <comparison2> expr3 

expr2は一度だけ評価されることを除い

(expr1 <comparison1> expr2) and (expr2 <comparison2> expr3) 

として扱われます。そのため、たとえば

0 <= i < n 

のように動作します。ただし、には、の連鎖比較演算子が適用されます。あなたの例では、

item in seq is True 

は、式全体はFalseですので、

(item in seq) and (seq is True) 

seq is True一部がFalseとして扱われます。

print((item in seq) is True) 

Click here for the docs:あなたはおそらく意図したものを取得するには、グループを変更するために括弧を使用しています。

>>>print ((item in seq) and (seq is True)) 
False 

以下のように

3

あなたの声明item in seq is Trueは内部Falseのため、あなたの文の出力がFalse(seqが真である)(item in seq) and (seq is True)として評価されます。

+0

@Tim Petersの答えがそれで十分に説明されていませんか? –

+0

@ t.m.adam - 私たちはどちらも同時に多かれ少なかれ答えました。彼の答えがこれをより詳細に説明するなら、この答えを削除させてください。 – Beginner

+0

@Beginner NO。質問に2つの正解がありますか? – void

1

以下の回答は正しくありません。型 'BOOL' の引数私は(ブールFalseに評価された)seq is Trueを評価していると信じて反復可能な


前答え ではありません。

In [17]: item in (seq is True) 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-17-4e7d6b2332d7> in <module>() 
----> 1 item in (seq is True) 

例外TypeError:コメントは、それを検証I説明しますitem in False(これは、Falseと評価される)を評価する。

おそらくprint (item in seq) is True(これはTrueと評価されます)を意味しますか?

+2

'item in False'は' TypeError'を発生させます。これは右辺の値が反復可能でなければならないため、 'False'はそうではありません。 –

+0

変更された回答。ありがとう – travelingbones

関連する問題