Esmail wrote: > Hi, > > I have a list of lists. The number of sublists may vary. The sizes of > the sublists may also vary. For instance, here I have a list with 3 > sublists of differing sizes. > > [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h', 'i']] > > This list will never be any deeper than this one level. > > What I would like to do is flatten this list, rearrange the items in > the new flattened list and then recreate the list of sublists with the > new content. I would like the sublists to have the same size and order > (relative to each other) as before. > > My code below seems to work, but it feels a bit "hack'ish", and I > am concerned about efficiency - so I would appreciate suggestions.
I don't think it's hackish, but here's an alternative: >>> items = [['a', 'b', 'c'], ['d', 'e'], ['f', 'g', 'h', 'i']] >>> flat = sum(items, []) >>> flat.reverse() >>> from itertools import imap, islice >>> flat = iter(flat) >>> [list(islice(flat, size)) for size in imap(len, items)] [['i', 'h', 'g'], ['f', 'e'], ['d', 'c', 'b', 'a']] Peter -- http://mail.python.org/mailman/listinfo/python-list