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

Python遍历嵌套列表生成可分组目标列表的实现方法求解

嵌套列表生成目标元组列表实现代码

以下是可直接运行的实现代码:

def is_nested(lst):
    # 判断当前列表是否为嵌套列表(包含子列表元素)
    return any(isinstance(i, list) for i in lst)

def flatten(lst):
    # 扁平化任意深度嵌套列表
    res = []
    for item in lst:
        if isinstance(item, list):
            res.extend(flatten(item))
        else:
            res.append(item)
    return res

def gen_prefix_tuples(lst):
    # 生成非嵌套列表的所有前缀元组
    return [tuple(lst[:i]) for i in range(1, len(lst)+1)]

if __name__ == "__main__":
    lst1 = [['sg'], ['sci'], ['op1', 'op2', 'op3'], ['pop1', 'pop2', 'pop3'], ['pn'], [['on'], ['pcat1', 'pcat2', 'pcat3'], ['oci']]]
    result = []
    # 提取主元素,初始化第一个元组
    main_val = lst1[0][0]
    result.append((main_val,))

    # 遍历lst1从第二个元素开始的所有项
    for item in lst1[1:]:
        if is_nested(item):
            # 嵌套列表先走规则4:先拼接全量扁平化元组
            full_flat = tuple(flatten(item))
            result.append((main_val,) + full_flat)
            # 再遍历子列表走规则2、3
            for sub_item in item:
                for prefix in gen_prefix_tuples(sub_item):
                    result.append((main_val,) + prefix)
        else:
            # 非嵌套列表直接走规则2、3
            for prefix in gen_prefix_tuples(item):
                result.append((main_val,) + prefix)
    
    # 输出结果验证
    print(result)

运行代码后输出结果与需求要求完全一致:

[('sg',), ('sg', 'sci'), ('sg', 'op1'), ('sg', 'op1', 'op2'), ('sg', 'op1', 'op2', 'op3'), ('sg', 'pop1'), ('sg', 'pop1', 'pop2'), ('sg', 'pop1', 'pop2', 'pop3'), ('sg', 'pn'), ('sg', 'on', 'pcat1', 'pcat2', 'pcat3', 'oci'), ('sg', 'on'), ('sg', 'pcat1'), ('sg', 'pcat1', 'pcat2'), ('sg', 'pcat1', 'pcat2', 'pcat3'), ('sg', 'oci')]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 21:54:02