假设我有一个多重嵌套的列表,其结构如下:
['p', [['p', 'q'], [['~p', '~r'], [['r', '~s'], ['s', '~q']]]]]
其中嵌套列表的每两个元素都是另一个嵌套列表(除了最里面的列表),我想输出提取所有带有字符串的列表,这样我的输出显示如下:
['p', ['p', 'q'], ['~p', '~r'], ['r', '~s'], ['s', '~q']]
我实现了以下代码:
def flatten_nested_list(nested_list):
flat_list = []
for item in nested_list:
if isinstance(item, list) and isinstance(item[1], list):
flat_list.append(item[0])
flat_list.extend(flatten_nested_list(item[1]))
else:
flat_list.append(item)
return flat_list
nested_list = ['p', [['~p', 'q'], [['~p', '~r'], [['r', '~s'], ['s', '~q']]]]]
flat_result = flatten_nested_list(nested_list)
print(flat_result)
然而,我的函数没有正确处理最里面的列表,我的输出如下:
['p', ['~p', 'q'], ['~p', '~r'], ['r', '~s'], 's', '~q']
是否可以建议任何更改,以便正确处理最内层的列表?
3条答案
按热度按时间nxagd54h1#
IIUC,你可以使用递归:
图纸:
编辑:
图纸:
bfrts1fy2#
假设列表的格式与上面描述的一致,我认为你可以跟踪一个布尔变量(下面代码中的
hasList
)来跟踪列表中的第二个元素是否是嵌套列表。如果没有,您可以将返回的列表包含在另一个列表中,以避免上面的flatten问题avwztpqn3#
线性时间解(其他答案需要二次时间):