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

如何生成所有指定元素个数的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:15:03