1

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.

nivix zixer
  • 1,611
  • 1
  • 13
  • 19

2 Answers2

2

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.

Community
  • 1
  • 1
Will Hogan
  • 909
  • 4
  • 9
1

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.

chucksmash
  • 5,777
  • 1
  • 32
  • 41