我正在开发一个程序,其中有一个包含大量无关嵌套的特定列表,我们希望对其进行简化。
例如,一个输入可以是
[[['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/