flatten a list of list

Tim Cook timothywayne.cook at gmail.com
Mon Aug 17 19:30:44 CEST 2009

On Aug 16, 6:47 am, Terry <terry.yin... at gmail.com> wrote:
> Hi,
> Is there a simple way (the pythonic way) to flatten a list of list?
> rather than my current solution:
> new_list=[]
> for l in list_of_list:
>     new_list.extend(l)
> or,
> new_list=reduce(lambda x,y:x.extend(y), list_of_list)
> br, Terry

Well, This is not simple but it is comprhensive in that it has to do
several things.  I am using it to decompose deeply nested lists from
Pyparsing output that may have strings in a variety of languages.
Performance wise I do not know how it stacks up against the other
examples but it works for me.  :-)

def flatten(x):
    """flatten(sequence) -> list

    Returns a single, flat list which contains all elements retrieved
    from the sequence and all recursively contained sub-sequences
    (iterables). All strings are converted to unicode.

    result = []
    for el in x:
        #if isinstance(el, (list, tuple)):
        if hasattr(el, "__iter__") and not isinstance(el, basestring):

    # all strings must be unicode
    for x in result:
        if isinstance(x,str):
            # replace any brackets so Python doesn't think it's a list
and we still have a seperator.
                x=unicode(x, "utf8")  # need more decode types here
            except UnicodeDecodeError:
                x=unicode(x, "latin1")
            except UnicodeDecodeError:
            except UnicodeDecodeError:


    return rtnlist

More information about the Python-list mailing list