如何通过递归方式从嵌套列表中获取所有元素组合?
如何生成嵌套数组的所有元素组合(笛卡尔积)
你要实现的是数组的笛卡尔积:从每个子数组中挑选一个元素,组合出所有可能的排列。下面给你两种实现方式:
一、用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]]
二、递归实现(满足你的需求)
递归的核心是把问题拆解成更小的子问题:
- 当输入数组为空时,返回包含空列表的列表(递归终止条件)
- 取第一个子数组的每个元素,和剩下的子数组递归生成的所有组合拼接,得到最终结果
代码实现如下:
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
相关产品推荐
相关产品推荐

