Neil Cerutti wrote: > On 2006-10-16, Tim Chase <[EMAIL PROTECTED]> wrote: >> If you need it in a flat list, rather than as a list of >> chunk_size lists (which are handy for iterating over in many >> cases), there are ways of obtaining it, such as the hackish >> >>>>> sum([a[i::chunk_size] for i in range(chunk_size)], []) >> [1, 4, 7, 10, 2, 5, 8, 3, 6, 9] >> >> There are likely good recipes for flattening a list. I just >> happen not to have any at my fingertips. > > Actually, there isn't a good recipe in Python for flattening a > list. They all come out tasting like Circus Peanuts (Turkish > Delight for you non-Yanks). >
Here's two that I came up with. They are both very fast compared to anything else I've seen. Maybe they won't taste so much like Peanuts. :-) def flatten(L): """ Flatten a list in place. """ i = 0 while i < len(L): while type(L[i]) is list: L[i:i+1] = L[i] i += 1 return L def sflatten(sequence): """ Return a flattened sequence as a list. """ def iterinner(seq): for s in seq: if hasattr(s, '__iter__'): for i in iterinner(s): yield i else: yield s return list(iterinner(sequence)) Cheers, Ron Adam -- http://mail.python.org/mailman/listinfo/python-list