# Need a strange sort method...

Tue Oct 17 18:42:52 CEST 2006

```Neil Cerutti wrote:
> On 2006-10-16, Tim Chase <python.list at tim.thechases.com> 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,