如何生成所有指定元素个数的array subarray并存储为2-d array?
实现指定长度子数组(组合)生成功能
你要实现的是从原数组中提取所有长度为指定值的元素组合,生成的结果不会包含元素顺序不同的重复子数组,和你给出的示例逻辑完全匹配。
方法1:使用Python内置库快速实现
Python标准库itertools已经封装了成熟的组合生成方法combinations,可以直接调用:
import itertools def get_k_subarrays(arr, k): # 生成的组合默认是元组格式,转成列表格式的二维数组 return [list(combination) for combination in itertools.combinations(arr, k)] # 测试示例 arr = [1,2,3,4] k = 3 print(get_k_subarrays(arr, k)) # 输出:[[1,2,3], [1,2,4], [1,3,4], [2,3,4]]
方法2:手动实现回溯逻辑(不依赖第三方库)
如果需要自己实现核心逻辑,可以用回溯算法完成,核心逻辑是每次选择元素时只从当前位置的后一位开始挑选,避免生成重复的排列类结果:
def get_k_subarrays(arr, k): result = [] def backtrack(start, current_comb): # 当前组合长度达到要求时,存入结果集 if len(current_comb) == k: result.append(current_comb.copy()) return # 从start位置开始遍历,避免重复选取前面的元素 for i in range(start, len(arr)): current_comb.append(arr[i]) backtrack(i + 1, current_comb) # 回溯,弹出最后添加的元素 current_comb.pop() backtrack(0, []) return result # 测试示例 arr = [1,2,3,4] k = 3 print(get_k_subarrays(arr, k)) # 输出:[[1,2,3], [1,2,4], [1,3,4], [2,3,4]]
注意事项
如果你需要的是元素顺序不同就算不同子数组的排列结果,可以将方法1中的combinations替换为permutations即可,但根据你给出的示例,组合逻辑已经满足需求。
内容的提问来源于stack exchange,提问作者Tanmay Sharma
相关产品推荐
相关产品推荐

