python - 如何从无关的嵌套中清除 Python 列表?

标签 python arrays list recursion tree

我正在开发一个程序,其中有一个包含大量无关嵌套的特定列表,我们希望对其进行简化。

例如,一个输入可以是

[[['A', [[[[[[[[[['B', [[[[[[[[[['C', [[[[[[[[[['D']], [['E']], [['F', [[[[[[[[[['G']]]]]]]]]]]], [['H']], [['I']], [['J']]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]

它应该输出 ['A', ['B', ['C', [['D'], ['E'], ['F', ['G']], ['H'], [ '我'], ['J']]]]]

但是,在运行我的代码后,它什么也没做并返回 []

这是我的代码:

def clean_list(list2):
    for item in list2:
        if isinstance(item, list) and len(list2)==1: # this is an extraneous list!
            item = clean_list(item)
            list2.append(item[0].copy())
            list2.remove(item)
    return list2

最佳答案

您可以使用一个函数递归地取消嵌套给定列表中的每个项目,但如果列表只有一个项目并且该项目是一个列表,则将子列表传递给递归调用:

def denest(lst):
    if isinstance(lst, list):
        if len(lst) == 1 and isinstance(lst[0], list):
            return denest(lst[0])
        return [denest(i) for i in lst]
    return lst

因此,鉴于您的样本列表存储在变量 lst 中,denest(lst) 将返回:

['A', ['B', ['C', [['D'], ['E'], ['F', ['G']], ['H'], ['I'], ['J']]]]]

关于python - 如何从无关的嵌套中清除 Python 列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57743672/

相关文章:

Python List,将一项从一项转移到另一项

python - 更改seaborn水平条形图的颜色

Javascript:检查数组中的任何元素是否包含字符串的一部分

java - 检查 ArrayList 中的数组元素是否包含特定值

javascript - 使用 Lodash 比较对象数组和整数数组

python - 从元组列表中提取不同的值

java - 比较父列表结构中的嵌套列表以获取java中特定索引中的值

python - boost.python C++ 多线程

python - 使用 Python 3 通过蓝牙发送消息

Python os.path.commonprefix - 是否有面向路径的函数?