尝试运行此列表:[1, [2, 3, [4, 5, [6]]], [7, 8], 9]
进入此列表:[1, 2, 3, 4, 5, 6, 7, 8, 9]
到目前为止,这是我的功能:
L = [1, [2, 3, [4, 5, [6]]], [7, 8], 9]
def unnesting(L):
my_list = []
for element in (L):
if type(element) is list:
my_list.extend(element)
else:
my_list.append(element)
return my_list
除了它给我这个输出:[1,2,3,[4,5,[6],7,8,9]
关于如何取消此列表,有什么解决方案或建议吗?非常感谢。
您需要递归,否则,该函数只适用于嵌套深度为2的情况。重要的认识是,当您的列表再次包含列表时,您将面临相同的问题,即可以再次调用相同的函数。
以下将起作用:
L = [1, [2, 3, [4, 5, [6]]], [7, 8], 9]
def unnest(lst1, lst2=None):
if lst2 is None:
lst2 = []
for x in lst1:
if not isinstance(x, list):
lst2.append(x)
else:
unnest(x, lst2)
return lst2
flattened = unnest(L)
print(flattened)
我想你只是在这里寻找一个简短的递归解决方案,试试这个:
L = [1, [2, 3, [4, 5, [6]]], [7, 8], 9]
def unnesting(my_list):
if type(my_list) == int:
return [my_list]
return sum((unnesting(elem) for elem in my_list), [])
print(unnesting(L))
Out: [1, 2, 3, 4, 5, 6, 7, 8, 9]
如果你对它的工作原理有任何疑问,请在下面留言,我会尽我所能帮助你理解。
你可以试试这个。我刚刚递归地调用了这个函数。
my_list = []
def unnesting(L):
for element in L:
if type(element) is list:
unnesting(element)
else:
my_list.append(element)
return my_list
这是一种有点不同的方法。我不建议这样做。但是python允许我们通过多种方式获得结果。
def unnest(lst):
_ = str(lst)
_ = _.replace('[', '').replace(']', '').replace(',', '').replace(' ', '')
return [int(i) for i in _]
L = [1, [2, 3, [4, 5, [6]]], [7, 8], 9]
unnest(L)