Split a list into two parts based on a filter?
Roy Smith
roy at panix.com
Tue Jun 11 20:33:44 EDT 2013
In article <mailman.3023.1370964449.3114.python-list at python.org>,
Serhiy Storchaka <storchaka at gmail.com> wrote:
> 11.06.13 07:11, Roy Smith напиÑав(ла):
> > In article <mailman.2992.1370904643.3114.python-list at python.org>,
> > Roel Schroeven <roel at roelschroeven.net> wrote:
> >
> >> new_songs, old_songs = [], []
> >> [(new_songs if s.is_new() else old_songs).append(s) for s in songs]
> >
> > Thanks kind of neat, thanks.
> >
> > I'm trying to figure out what list gets created and discarded. I think
> > it's [None] * len(songs).
>
> It is the same as your klunky code, but consumes more memory.
Well, continuing down this somewhat bizarre path:
new_songs, old_songs = [], []
itertools.takewhile(
lambda x: True,
(new_songs if s.is_new() else old_songs).append(s) for s in songs)
)
I'm not sure I got the syntax exactly right, but the idea is anything
that will iterate over a generator expression. That at least gets rid
of the memory requirement to hold the throw-away list :-)
More information about the Python-list
mailing list