如何用Python基础库实现两个嵌套列表的规则化全组合生成
可完全通过Python基础标准库实现该需求
现有代码的问题定位
你当前编写的代码存在两个核心逻辑偏差,无法得到预期结果:
- 结构组织错误:使用
extend会把循环取出的元素全部平铺追加到同一个一维列表中,没有按A/B/C类别做嵌套结构组装 - 流程逻辑缺失:既没有生成跨类别的全量组合关系,也没有落地C类元素的特殊约束校验规则
规则可执行化拆解
将提出的约束转换为明确的可落地判断逻辑:
- 无特殊约束的A、B类:从对应索引位置的两个源列表子项中,各取1个元素配对,组成该类别的输出子项
- 带特殊约束的C类:
- 生成双元素结构的C类子项时,可正常从list1、list2的C类子项中各取1个元素配对
- 生成单元素结构的C类子项时,元素必须从list1的C类子项中选取,禁止单独取list2中的C3
- 单条最终输出的固定结构为:
[A类子项, B类子项, C类子项]
基础库实现代码
不需要引入任何第三方依赖,仅使用Python内置语法和标准库模块即可完成开发:
import itertools list_1 = [["A1","A2"],["B1","B2"],["C1","C2"]] list_2 = [["A3","A4"],["B3","B4"],["C3"]] # 生成A类所有合法可选子项 a_cand = [] for l1_item in list_1[0]: for l2_item in list_2[0]: a_cand.append([l1_item, l2_item]) # 生成B类所有合法可选子项 b_cand = [] for l1_item in list_1[1]: for l2_item in list_2[1]: b_cand.append([l1_item, l2_item]) # 生成C类所有符合约束的可选子项 c_cand = [] # 双元素子项:正常配对list1、list2的C类元素 for l1_item in list_1[2]: for l2_item in list_2[2]: c_cand.append([l1_item, l2_item]) # 单元素子项:仅从list1的C类元素选取,符合约束要求 for l1_item in list_1[2]: c_cand.append([l1_item]) # 生成所有跨类别合规组合 output = [] for a, b, c in itertools.product(a_cand, b_cand, c_cand): output.append([a, b, c]) # 结果打印验证 for res in output: print(res)
你提供的示例输出是全量合规组合中的节选,上述代码会生成所有符合C类约束的组合,若需要匹配示例中的特定条目,只需在遍历组合时增加对应过滤规则即可,这类逻辑调整完全可以通过Python基础语法实现。
内容的提问来源于stack exchange,提问作者Pedro
相关产品推荐
相关产品推荐

