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

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

【讨论】:

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

LINQ - 从嵌套列表中获取值的总数并保存在父列表中[重复]

如何在c ++中删除嵌套列表中的重复元素

从嵌套列表创建字典 [重复]

从 Python 列表中删除重复项

如何检查平面列表中是不是有重复项?

如何从同一平面列表中的另一个项目更改平面列表中项目的状态?