and [True,True] --> [True, True]?????
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Mon Apr 20 05:26:34 EDT 2009
On Mon, 20 Apr 2009 10:54:40 +0200, Gerhard Häring wrote:
> Peter Otten wrote:
>> bdb112 wrote:
>>
>>> Your explanation of Boolean ops on lists was clear. It leads to some
>>> intriguing results:
>>>
>>> bool([False])
>>> --> True
>>>
>>> I wonder if python 3 changes any of this?
>>
>> No. Tests like
>>
>> if items:
>> ...
>>
>> to verify that items is a non-empty list are a widespread idiom in
>> Python. They rely on the behaviour you observe.
>
> Are they widespread? I haven't noticed, yet.
>
> I prefer to write it explicitly:
>
> if len(lst) > 0:
Do you also count the length of a list explicitly?
n = 0
for item in lst:
n += 1
if n > 0:
...
No? Of course you don't. You understand that lists know how to calculate
their own length, and you just ask the list for its length. Great.
Well, lists also know whether or not they are empty, without needing to
concern yourself with the definition of "empty".
if lst:
# not empty
else:
# empty
All Python objects have an understanding of "empty" or "not empty", and
the only time I've seen it cause problems is with iterators, because you
can't tell if an iterator is empty until you actually try to access a
value.
> if item is None:
> ...
That's a completely different test. That's testing whether item is the
specific singleton None. It is very different from testing bool(item).
--
Steven
More information about the Python-list
mailing list