flattening and rebuilding a simple list of lists
__peter__ at web.de
Mon Nov 30 14:34:29 CET 2009
> 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, )
>>> 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']]
More information about the Python-list