如何在Python中展平/渗透任意结构的嵌套列表?

时间:2012-06-07 23:23:16

标签: python nested-lists flatten

  

可能重复:
  Flatten (an irregular) list of lists in Python

例如,来自:

[[1,2,3],'a',[[4],[5,6],7]]

我们希望展平/穿透结构并将所有元素列在一行中:

[1,2,3,'a',4,5,6,7]

2 个答案:

答案 0 :(得分:2)

# a recursive function to flatten arbitrary nested lists into one simple 1D list
def flatten(inlist,outlist):   
    for e in inlist:
        if isinstance(e,list) :
            flatten(e,outlist)
        else:
            outlist.append(e)

这是递归函数的实践,:)。这里的“outlist”作为return-list的参考。

必须有更好的结构......

) 例如:

答案 1 :(得分:0)

为了您的利益,这里有一个实现修改列表的实现:

def flatten_in_place(seq):
    if isinstance(seq, list):
        for index, item in reversed(list(enumerate(seq))):
            if isinstance(item, list):
                seq[index: index + 1] = fil(item)
        return seq
    else:
        return [seq]

用法:

>>> l = [[1, 2], [3, 4], 5, 6, [7, [8, 9]]]
>>> flatten_in_place(l)
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9]

有趣的是,timeit结果(t = 1,000,000)表明这比你的实现稍快:

flatten_in_place time: 4.88
flatten time: 5.16

我不确定为什么会这样。有什么想法吗?