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

如何通过递归方式从嵌套列表中获取所有元素组合?

如何生成嵌套数组的所有元素组合(笛卡尔积)

你要实现的是数组的笛卡尔积:从每个子数组中挑选一个元素,组合出所有可能的排列。下面给你两种实现方式:

一、用Python内置工具快速实现

Python的itertools模块里的product函数直接就能搞定这个需求,代码简洁高效:

import itertools

some_list = [[1, 2], [3, 4], [5, 6, 7]]
# product返回的是元组迭代器,转成列表的列表
result = [list(item) for item in itertools.product(*some_list)]
print(result)

运行后就能得到你想要的结果:

[[1, 3, 5], [1, 3, 6], [1, 3, 7], [1, 4, 5], [1, 4, 6], [1, 4, 7], [2, 3, 5], [2, 3, 6], [2, 3, 7], [2, 4, 5], [2, 4, 6], [2, 4, 7]]

二、递归实现(满足你的需求)

递归的核心是把问题拆解成更小的子问题:

  1. 当输入数组为空时,返回包含空列表的列表(递归终止条件)
  2. 取第一个子数组的每个元素,和剩下的子数组递归生成的所有组合拼接,得到最终结果

代码实现如下:

def cartesian_product(arrays):
    # 递归终止:空数组返回仅含空列表的列表
    if not arrays:
        return [[]]
    # 拆分第一个子数组和剩余部分
    first_subarray = arrays[0]
    rest_combinations = cartesian_product(arrays[1:])
    # 拼接每个元素和剩余组合
    return [[item] + combo for item in first_subarray for combo in rest_combinations]

some_list = [[1, 2], [3, 4], [5, 6, 7]]
print(cartesian_product(some_list))

这段代码的执行逻辑:先递归处理[[3,4],[5,6,7]]得到它们的所有组合,再把1、2分别和这些组合拼接,就生成了所有可能的完整组合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 15:25:15