如何改进Python的list_generator函数以实现预期列表输出
问题背景
待修复函数的预期输入输出规则如下:
f(0) -> [] f(1) -> [[1]] f(2) -> [[1], [1,2]] f(3) -> [[1], [1,2], [1,2,3]]
待改进的原始实现代码:
def list_generator(number: int) -> list: if number == 0: new_list = [] else: temp_list = [] new_list = [0] * number for idx, num in zip(range(len(new_list)), range(1, number + 1)): temp_list.append(num) new_list[idx] = list(set(temp_list)) return new_list
原始代码存在的问题
- 冗余操作过多:提前初始化长度为
number的占位列表new_list没有必要;同时遍历索引和数值的zip写法属于多余逻辑,完全可以简化。 - 实现存在不稳定风险:代码中对有序追加得到的
temp_list做set转换属于无效操作,set本身不保证元素顺序,在部分Python版本中可能出现子列表元素乱序的问题。 - 分支冗余:为输入0单独写返回分支没有必要,通用遍历逻辑可以直接覆盖输入为0的场景。
改进方案
易读版本(逻辑清晰适合新手理解)
def list_generator(number: int) -> list: result = [] for i in range(1, number + 1): # 每次生成1到i的连续整数列表,追加到结果中 result.append(list(range(1, i + 1))) return result
简洁版本(列表推导式实现)
def list_generator(number: int) -> list: return [list(range(1, i + 1)) for i in range(1, number + 1)]
上述实现完全覆盖所有预期输入场景,没有冗余操作,子列表元素顺序稳定,运行效率更高。当输入为0时,range(1, 0+1)为空,直接返回空列表,不需要单独写分支判断。
内容的提问来源于stack exchange,提问作者fabio.geraci
相关产品推荐
相关产品推荐

