如何修复分块嵌套列表生成函数,适配非整除输入场景?
问题修复:生成符合要求的嵌套列表
我们需要将数字拆分为指定份数,已有如下parts函数可实现近似等长拆分:
def parts(num: int, div: int) -> list[int]: """Split a number into equal parts.""" return [num // div + (1 if x < num % div else 0) for x in range(div)]
拆分示例:
assert parts(8, 3) == [3, 3, 2] assert parts(9, 3) == [3, 3, 3] assert parts(10, 3) == [4, 3, 3]
接下来需生成一个嵌套列表,包含0到num+3的数值,要求:
- 偶数索引的子列表长度为1
- 奇数索引的子列表长度取自
parts函数的结果
预期输出示例:
assert expected(8, 3) == [[0], [1, 2, 3], [4], [5, 6, 7], [8], [9, 10]] assert expected(9, 3) == [[0], [1, 2, 3], [4], [5, 6, 7], [8], [9, 10, 11]] assert expected(10, 3) == [[0], [1, 2, 3, 4], [5], [6, 7, 8], [9], [10, 11, 12]]
本人尝试实现的actual函数如下:
def actual(num: int, div: int) -> list[list[int]]: matrix: list[list[int]] = [] for i, length in enumerate(parts(num, div)): base = i * (length + 1) matrix.append([base]) matrix.append([base + j + 1 for j in range(length)]) return matrix
但该函数仅在num能被div整除时输出正确,非整除场景下结果错误,错误输出示例:
assert actual(8, 3) == [[0], [1, 2, 3], [4], [5, 6, 7], [6], [7, 8]] assert actual(10, 3) == [[0], [1, 2, 3, 4], [4], [5, 6, 7], [8], [9, 10, 11]]
请问如何修复该函数,使其在所有输入场景下输出符合预期的嵌套列表?
内容的提问来源于stack exchange,提问作者ezgrs
相关产品推荐
相关产品推荐

