从多类型嵌套列表中制作平面列表[重复]

Posted

技术标签:

【中文标题】从多类型嵌套列表中制作平面列表[重复]【英文标题】:Making a flat list out of a multi-type nested list [duplicate] 【发布时间】:2011-09-23 21:33:07 【问题描述】:

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

我有以下列表--

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

我需要把它弄平——

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

为此,我目前使用for 循环和isinstance,循环数为#nests - 1

使嵌套列表扁平化的最简单方法是什么?谢谢。

可以在此处找到有关从嵌套列表(仅)中制作平面列表的类似问题:Making a flat list out of list of lists in Python。

【问题讨论】:

【参考方案1】:

来自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 绝对正确,这是一个骗子,所以请转到链接的问题。

【讨论】:

嗨,我很难理解这行“for relm in flatten(elm)”。递归在这里工作的程度如何。,在每次迭代之后,它是否会“yield relm”行? ?有人可以用空跑来解释我吗?请 我们可以像这样处理迭代............ try: # it_is = iter(x) # # 如果它不是可迭代的,则按原样返回列表# 产量 x【参考方案2】:

试试这个:

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

【讨论】:

以上是关于从多类型嵌套列表中制作平面列表[重复]的主要内容,如果未能解决你的问题,请参考以下文章