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

如何从多组坐标子列表生成所有可能路径?

生成所有可能路径的解决方案

问题描述

给定一个嵌套列表,例如:

l = [[[0, 4], [0, 2]], [[1, 3], [1, 6], [1, 2]]]

需要生成包含所有可能路径的列表,每个路径由从每个子列表中选取一个元素组成,预期输出为:

l_paths = [[[0, 4], [1, 3]], [[0, 4], [1, 6]], [[0, 4], [1, 2]],  [[0, 2], [1, 3]], [[0, 2], [1, 6]], [[0, 2], [1, 2]]]

你之前的代码仅能获取第一条路径,下面提供两种通用解决方案。


方案一:使用标准库itertools.product(推荐)

这个问题本质是求多个子列表的笛卡尔积,Python标准库的itertools.product专门用于生成这种组合,代码简洁高效:

import itertools

l = [[[0, 4], [0, 2]], [[1, 3], [1, 6], [1, 2]]]
# 用*l将嵌套列表拆分为多个参数传入product,再将每个元组转为列表
l_paths = [list(path) for path in itertools.product(*l)]
print(l_paths)

执行后会直接生成符合要求的所有路径列表,该方法支持任意长度的输入嵌套列表。


方案二:递归实现(适合理解原理)

如果不想依赖标准库,可以用递归的方式手动生成所有组合:

def generate_paths(lists):
    # 递归终止条件:没有子列表时返回空路径
    if not lists:
        return [[]]
    result = []
    # 遍历当前子列表的每个元素
    for item in lists[0]:
        # 递归处理剩余子列表,将当前元素与后续路径组合
        for path in generate_paths(lists[1:]):
            result.append([item] + path)
    return result

l = [[[0, 4], [0, 2]], [[1, 3], [1, 6], [1, 2]]]
l_paths = generate_paths(l)
print(l_paths)

这种方法通过逐层拆解嵌套列表,将每个元素与后续子列表的所有路径进行组合,最终得到全量路径。


原代码问题分析

你之前的代码仅遍历每个子列表并取第一个元素加入路径,没有对所有元素进行组合遍历,因此只能生成一条路径。上述两种方案都解决了这个问题,实现了全路径的生成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 01:57:37