Better solution

Ken Seehof kseehof at neuralintegrator.com
Tue Aug 20 22:29:18 CEST 2002


> -----Original Message-----
> From: python-list-admin at python.org
> [mailto:python-list-admin at python.org]On Behalf Of holger krekel
> Sent: Tuesday, August 20, 2002 12:37 PM
> To: Michael Hudson
> Cc: python-list at python.org
> Subject: Re: Better solution
> 
> 
> Michael Hudson wrote:
> > holger krekel <pyth at devel.trillke.net> writes:
> > 
> > > > If you want to mutate the list, I'd say:
> > > > 
> > > > lst[:] = filter(None, lst)
> > > > 
> > > > is better than the monstrosity above.
> > > 
> > > why the '[:]'? 
> > > 
> > > doesn't seem to make any difference here unless
> > > filter is allowed to return the same lst-object.
> > 
> > It depends whether you want to change the acutal list object or merely
> > have 'lst' refer to a changed list.  Bo was using .pop in his
> > question, so it's possible he wanted the former.
> 
> Aehem. i must be missing something obvious. 
> 
> Yes, append/sort/pop and friends are inplace-methods.
> 
> But isn't 
> 
>     filter(None,lst) 
> 
> supposed to return a new list? 
> 
> somebody is missing something here :-)
> 
>     holger

Yes, but that brand new list object is being copied into the target list,
so the target list doesn't change it's identity.

>>> a = b = [1,2,3]
>>> b[:] = [4,5,6]
>>> a
[4, 5, 6]

>>> a = b = [1,2,3]
>>> b = [4,5,6]
>>> a
[1, 2, 3]

- Ken






More information about the Python-list mailing list