You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修正Python多层嵌套列表扁平化代码,正确处理最内层列表?

问题:修正嵌套列表提取逻辑

原始嵌套列表结构:

['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']

修正方案

问题根源在于对最内层列表的判断逻辑:现有代码会把最内层列表的单个元素拆分添加,因为最内层列表的第二个元素不是列表,触发了else分支逐个处理元素。我们需要调整判断逻辑,先识别最内层列表(即列表内所有元素都不是列表),直接将整个列表加入结果;非最内层列表则提取第一个元素,再递归处理第二个元素。

修改后的代码:

def flatten_nested_list(nested_list):
    flat_list = []
    for item in nested_list:
        # 判断当前项是否为列表
        if isinstance(item, list):
            # 检查是否为最内层列表:所有子元素都不是列表
            is_leaf = all(not isinstance(sub_item, list) for sub_item in item)
            if is_leaf:
                flat_list.append(item)
            else:
                # 非最内层,提取第一个元素并递归处理第二个元素
                flat_list.append(item[0])
                flat_list.extend(flatten_nested_list(item[1]))
        else:
            # 非列表项直接添加(对应顶层单个元素如'p')
            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']]

内容的提问来源于stack exchange,提问作者Jimmeh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 00:38:25