合并不同形状数组:请求实现特定元素配对组合逻辑
解决不同形状数组合并的问题
嘿,我完全理解你被这个问题卡住的感觉!其实核心就是把两个数组对应位置的元素做嵌套配对,用Python的话很容易实现,我给你两种方案,一种是容易理解的循环写法,另一种是更简洁的列表推导式。
思路拆解
你需要的逻辑很明确:
- 取
array_a里的第i个元素,和array_b里的第i个子数组的每一个元素,两两组成新的子数组 - 把所有这些新子数组按顺序收集到
array_c里
方案1:分步循环写法(易理解)
这种写法逻辑清晰,适合刚接触这类操作的情况,每一步都能看明白:
array_a = [1,2,3,4,5] array_b = [[2, 4, 8, 16, 32], [3, 9, 27, 81, 243], [4, 16, 64, 256, 1024], [5, 25, 125, 625, 3125]] array_c = [] # 用zip把array_a和array_b的对应元素配对遍历 for a_element, sub_array in zip(array_a, array_b): # 遍历当前子数组里的每个元素,和a_element组成新数组 for num in sub_array: array_c.append([a_element, num]) # 输出结果就是你想要的array_c print(array_c)
方案2:列表推导式(简洁高效)
如果喜欢更紧凑的代码,一行就能搞定,逻辑和上面的循环完全一致:
array_a = [1,2,3,4,5] array_b = [[2, 4, 8, 16, 32], [3, 9, 27, 81, 243], [4, 16, 64, 256, 1024], [5, 25, 125, 625, 3125]] array_c = [[a, num] for a, sub_b in zip(array_a, array_b) for num in sub_b]
小补充
- 这里用
zip()来配对两个数组的对应元素,如果array_a和array_b长度不一样,zip()会自动以较短的数组长度为准停止遍历。比如你的例子里array_a有5个元素,array_b只有4个,那array_a的最后一个元素5不会被处理;如果需要处理所有元素,可以用itertools.zip_longest,不过看你的期望结果应该不需要这个~
内容的提问来源于stack exchange,提问作者shan
相关产品推荐
相关产品推荐

