将多类型嵌套列表扁平化为一维列表

2 投票
2 回答
2505 浏览
提问于 2025-04-16 20:25

可能重复的问题:
在Python中将不规则的列表扁平化

我有一个这样的列表 --

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

我需要把它变成一个扁平的列表 --

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

为此,我现在使用的是一个 for 循环,配合 isinstance,循环的次数是 #nests - 1

有没有更简单的方法可以把嵌套的列表变成扁平的呢?谢谢。

关于如何将嵌套列表变成扁平列表的类似问题,可以在这里找到:在Python中将列表的列表变成扁平列表

2 个回答

1

试试这个:

def flat(mlist):
    result = []
    for i in mlist:
        if type(i) is list:
            result.extend(flat(i))
        else:
            result.append(i)
    return result
8

摘自 webhelpers.misc.flatten

def flatten(iterable):
    """Recursively iterate lists and tuples.
    """
    for elm in iterable:
        if isinstance(elm, (list, tuple)):
            for relm in flatten(elm):
                yield relm
        else:
            yield elm

编辑:这里的可迭代对象测试比较简单,可以通过检查是否有 __iter__ 方法或者是否是 collections.Iterable 抽象基类的实例来改进。

编辑 2:@ChristopheD 说得对,这个问题是重复的,可以去看看链接中的问题。

撰写回答