如何在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
相关产品推荐
相关产品推荐

