Scala中按指定分区大小拆分列表问题求助(递归实现遇阻)
用递归实现列表按指定分区大小拆分
嘿,你的递归思路其实完全可行!我来帮你把这个方案落地,咱们一步步拆解清楚。
核心递归逻辑
递归的核心就是每次处理当前第一个分区大小,截取对应数量的元素作为子列表,然后把剩余的元素和剩余的分区大小传入下一次递归,直到分区列表为空或者元素列表为空为止。
具体代码实现(以Python为例)
def split_list(values, sizes): # 递归终止条件:没有分区需求,或者没有剩余元素,直接返回空列表 if not sizes or not values: return [] # 取出当前要处理的分区大小 current_part_size = sizes[0] # 截取对应数量的元素作为当前子列表 current_chunk = values[:current_part_size] # 准备剩余的元素和剩余的分区列表,用于下一次递归 remaining_values = values[current_part_size:] remaining_sizes = sizes[1:] # 合并当前子列表和递归处理剩余部分的结果 return [current_chunk] + split_list(remaining_values, remaining_sizes)
测试示例
咱们用实际数据测试一下:
# 待拆分的原始列表 original_values = [1, 2, 3, 4, 5, 6, 7] # 指定的各分区大小 partition_sizes = [2, 3, 2] # 调用函数得到结果 result = split_list(original_values, partition_sizes) print(result) # 输出:[[1, 2], [3, 4, 5], [6, 7]]
边界情况处理
这个实现还能自动应对一些特殊情况:
- 如果分区大小总和超过原始列表长度:比如
partition_sizes = [2, 4, 2],original_values = [1,2,3,4,5],结果会是[[1,2], [3,4,5], []],不足的分区会返回空列表。 - 如果原始列表长度超过分区总和:比如
partition_sizes = [2],original_values = [1,2,3,4],结果会是[[1,2]],剩余未分配的元素会被忽略(如果需要保留剩余元素,可以调整终止条件,比如当分区用完但还有元素时,把剩余元素作为最后一个子列表)。
递归过程拆解(以测试示例为例)
- 第一次调用:处理
[1,2,3,4,5,6,7]和[2,3,2],截取前2个元素得到[1,2],剩余元素[3,4,5,6,7]和剩余分区[3,2]进入下一次递归。 - 第二次调用:处理
[3,4,5,6,7]和[3,2],截取前3个元素得到[3,4,5],剩余元素[6,7]和剩余分区[2]进入下一次递归。 - 第三次调用:处理
[6,7]和[2],截取前2个元素得到[6,7],剩余元素[]和剩余分区[]进入下一次递归,触发终止条件返回空列表。 - 最后把所有子列表合并,得到最终结果。
内容的提问来源于stack exchange,提问作者Daniel Almeida
相关产品推荐
相关产品推荐

