在Python中如何将一个多维不规则列表转换为一维列表


在Python中如何将一个多维不规则列表转换为一维列表

例如,

L = [[[1, 2, 3], [4, 5]], 6]

期望的输出是

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

使用生成器函数实现

使用生成器函数可以使您的示例更容易阅读,并可能提高性能。

Python 2

def flatten(l):
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, basestring):
            for sub in flatten(el):
                yield sub
        else:
            yield el

我使用2.6中添加的Iterable ABC。

Python 3

在Python 3中,basestring不再是,但你可以使用元组str并bytes在那里获得相同的效果。

该yield from操作符从生成器一次一个返回的项目。这句法委派到子生成器在3.3加入

def flatten(l):
    for el in l:
        if isinstance(el, collections.Iterable) and not isinstance(el, (str, bytes)):
            yield from flatten(el)
        else:
            yield el

也可以这样

def flatten(x):
    if isinstance(x, collections.Iterable):
        return [a for i in x for a in flatten(i)]
    else:
        return [x]