Go to Google Groups Home    comp.lang.python
Re: 0 == False but [] != False?

Robert Kern <robert.k...@gmail.com>

Rajarshi wrote:
> This is a slightly naive question, but I know that 0 can be used to
> represent False. So

>>>> 0 == False
> True

> But, I know I can use [] to represent False as in

>>>> if not []: print 'empty'
> ...
> empty

> But then doing the following gives a surprising (to me!) result

>>>> [] == False
> False

> Could anybody point out why this is the case?

"if foo:" does not check if "foo == True" or "foo == False" but rather
"bool(foo)". For empty lists, strings, tuples, dicts and some other things,
"bool(foo) == False", while for lists, etc., with at least one element,
"bool(foo) == True".

--
Robert Kern

"I have come to believe that the whole world is an enigma, a harmless enigma
 that is made terrible by our own mad attempt to interpret it as though it had
 an underlying truth."
  -- Umberto Eco