On Sat, Nov 24, 2018 at 11:28 AM John Pote <johnp...@jptechnical.co.uk> wrote: > But the following I found unexpected. (Python 3.6 on a Windows 7 64 bit box) > > >>> if []: print("Truthy") > ... > >>> if [1,2,3]: print("Truthy") > ... > Truthy > >>> > > from which I concluded [] is Falsey and [1,2,3] is Truthy and the above > if statements work as expected.
This is correct. Empty collections are falsey, non-empty collections are truthy. > but, > > >>> [1,2,3] == True > False > >>> > > is unexpected as to my mind as [1,2,3] is 'Truthy' and True has ultimate > 'Truthiness'. This is also correct, because now you're asking if this is EQUAL TO the specific value "True". It is true to say that Python is a programming language. It is true to say that a python is a snake. It is NOT true to say that these statements are equivalent. > Any ideas? Is there an implicit 'casting' taking place and if so is this > documented somewhere? > > I interpret the above comparison as > > >>> bool([1,2,3]) == bool(True) > True > >>> If you want to check if two values have the same truthiness, then this would be how you do it. (Or you could say "not [1,2,3] == not True", but that's a bit less clear.) An equality check is not the same. You would not expect 4 to be equal to 5, but both of them are truthy values (since they're both nonzero). ChrisA -- https://mail.python.org/mailman/listinfo/python-list