Python实现类zip功能函数 遍历多列表生成多层级元素组合
实现方案
你这个需求不是通用的列表组合/笛卡尔积场景,本质是多级联动下拉菜单的全路径遍历:上一级的每个选项,只对应下一级列表中按顺序匹配的选项分组,所以直接用itertools.product或者原生zip没法直接实现——前者会生成所有无关联的交叉组合,后者只会对位返回分组不会展开拼接路径。
可直接复用的函数
支持传入任意数量的层级分组,返回所有符合联动逻辑的选择路径:
def get_all_select_paths(*level_groups): if not level_groups: return [] # 初始化第一层的所有单节点路径 paths = [[item] for item in level_groups[0]] # 逐层拼接下一级选项 for current_level in level_groups[1:]: next_level_paths = [] group_cursor = 0 for exist_path in paths: # 按游标取当前路径对应的下一级选项分组 match_group = current_level[group_cursor] # 拼接分组内所有选项生成新路径 for option in match_group: next_level_paths.append(exist_path + [option]) group_cursor += 1 paths = next_level_paths return paths
测试验证
传入你给出的测试数据运行:
a = [["2022"], ["2023"]] b = [["blue", "red"], ["green", "yellow"]] c = [["1", "2", "3"], ["4", "5", "6", "7"], ["8", "9", "10", "11"], ["12", "13"]] result = get_all_select_paths(a, b, c)
运行后result的内容和你给出的预期输出完全一致。
逻辑说明
- 函数从第一层开始,先把第一层的每个选项生成为单独的初始路径
- 遍历后续每一层时,维护一个分组游标,按顺序给上一层生成的每个路径,匹配对应的下一级选项分组
- 把分组内的每个选项拼接到现有路径后,生成下一层的全量路径,直到所有层级遍历完成
- 只要传入的各层分组符合「第N层的分组总数 = 第N-1层所有选项的总个数」的联动规则,不管层级有多少、每个上级选项对应多少个下级选项,都能正确生成结果
内容的提问来源于stack exchange,提问作者Pexp22
相关产品推荐
相关产品推荐

