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

如何在Python中实现多组数组的元素笛卡尔积组合?

Python实现多组数组的笛卡尔积组合生成

你需要的是生成多组数组的笛卡尔积,即从每个子数组中选取一个元素,组合出所有可能的数组。下面提供两种实现方式:

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

Python标准库itertools中的product函数专门用于生成笛卡尔积,代码简洁且性能优异:

import itertools

def generate_combinations(num_arr):
    # 将product返回的元组转换为列表
    return [list(combination) for combination in itertools.product(*num_arr)]

# 测试示例
num_arr = [[1], [12], [22], [31, 32, 33], [41, 42]]
result = generate_combinations(num_arr)
for comb in result:
    print(comb)

运行后会输出所有符合要求的组合,比如[1,12,22,31,41]、[1,12,22,31,42]等。

方法二:手动实现与JavaScript逻辑对应的代码

如果你希望和你提供的JavaScript代码逻辑保持一致,可以手动实现嵌套循环的方式:

def generate_combinations_manual(num_arr):
    # 初始化结果数组,以第一个子数组的元素作为初始组合
    total_num_arr = [[num] for num in num_arr[0]]
    
    for i in range(1, len(num_arr)):
        current_subarr = num_arr[i]
        temp_num_arr = []
        # 遍历现有所有组合
        for j in range(len(total_num_arr)):
            # 遍历当前子数组的每个元素
            for k in range(len(current_subarr)):
                # 复制现有组合(对应JS中的slice()),避免引用修改
                new_comb = total_num_arr[j].copy()
                new_comb.append(current_subarr[k])
                temp_num_arr.append(new_comb)
        total_num_arr = temp_num_arr
    
    return total_num_arr

# 测试示例
num_arr = [[1], [12], [22], [31, 32, 33], [41, 42]]
result = generate_combinations_manual(num_arr)
for comb in result:
    print(comb)

这段代码的逻辑和你提供的JavaScript代码完全对应:逐步将每个子数组的元素与已有的组合进行拼接,生成新的组合集合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:07:02