Reputation: 1651
Can someone please explain this behavior?
In[11]: (1, 2) in [(True, 2)]
Out[11]: True
In[12]: (1, 2) in [(True, True)]
Out[12]: False
In[13]: (1, 2) in [(True, False)]
Out[13]: False
In[14]: ("1", 2) in [(True, 2)]
Out[14]: False
It feels like a bug--whenever I check if a tuple is in a list of tuples, the integer 1 is always equal to True. I don't want to report it to the Python bug tracker if it can be explained.
Upvotes: 1
Views: 121
Reputation: 5997
The "trick" here I suppose is that 1 == True
and 0 == False
both evaluate to True
.
Your lines 11
, 12
and 13
imply that all truthy values should be equal. If that were the case though, 1 == 2
would evaluate to True
which would clearly be a bug.
Upvotes: 1
Reputation: 919
It's something of an implementation detail of True
, see Is False == 0 and True == 1 in Python an implementation detail or is it guaranteed by the language? for a discussion.
Upvotes: 2