On Wed, Jun 12, 2013 at 4:13 AM, Peter Otten <__pete...@web.de> wrote: > Chris Angelico wrote: > >> On Wed, Jun 12, 2013 at 1:28 AM, Serhiy Storchaka <storch...@gmail.com> >> wrote: >>> 11.06.13 01:50, Chris Angelico написав(ла): >>> >>>> On Tue, Jun 11, 2013 at 6:34 AM, Roy Smith <r...@panix.com> wrote: >>>>> >>>>> new_songs = [s for s in songs if s.is_new()] >>>>> old_songs = [s for s in songs if not s.is_new()] >>>> >>>> >>>> Hmm. Would this serve? >>>> >>>> old_songs = songs[:] >>>> new_songs = [songs.remove(s) or s for s in songs if s.is_new()] > > I think you meant old_songs.remove(s).
Ah, yes, editing fail. I started by mutating the original list, then thought "Oh, better to work with a copy"... and forgot to complete the edit. >>> O(len(songs)**2) complexity. >> >> Which isn't significant if len(songs) is low. We weren't told the >> relative costs - is the is_new call ridiculously expensive? Everything >> affects algorithmic choice. > > But is it correct? In the general case, no: > >>>> numbers = [1, 1.0, 2.0, 2] >>>> ints = numbers[:] >>>> floats = [ints.remove(n) or n for n in numbers if isinstance(n, float)] >>>> floats > [1.0, 2.0] >>>> ints > [1.0, 2] # hmm Sure, but the implication of the original is that they're uniquely identifiable. Anyway, it wasn't meant to be absolutely perfect, just another notion getting thrown out there... and then thrown out :) ChrisA -- http://mail.python.org/mailman/listinfo/python-list