"Diez B. Roggisch" <[EMAIL PROTECTED]> writes:

> [EMAIL PROTECTED] wrote:

>> The Example 2 builds a list, that is then thrown away. It's just a
>> waste of memory (and time).

> No, it doesn't. It uses append because it refers to itself in the
> if-expression. So the append(c) is needed - and thus the assignment
> possible but essentially useless.

Yes it does.  A list comprehension *always* creates a list.  In
this case it will be a list of None, since that is what list.append()
returns.  See this:

    >>> new=[]
    >>> s="This is a foolish use of list comprehensions"
    >>> [ new.append(c) for c in s if c not in new ]
    [None, None, None, None, None, None, None, None, None, None, None,
     None, None, None, None, None, None]

Yes, you do get a correct result in 'new', but you *also* create
a 17 long list with all elements set to None, that is immediately
thrown away.


-- 
Thomas Bellman,   Lysator Computer Club,   Linköping University,  Sweden
"I refuse to have a battle of wits with an   !  bellman @ lysator.liu.se
 unarmed person."                            !  Make Love -- Nicht Wahr!
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to