如何不使用循环从给定列表逐个移除末尾元素生成对应子列表
无循环生成递增子列表集合实现方案
需求说明
给定已排序的自然数列表,例如 [0, 1, 2, 3, 4],不使用显式循环、仅调用内置函数,生成逐个扩展末尾元素的子列表集合,预期输出如下:
[[0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]
最优实现(Python)
全程仅调用内置函数即可完成,无需手写任何循环逻辑,代码如下:
# 示例输入 input_lst = [0, 1, 2, 3, 4] # 核心实现代码 result = list(map(lambda x: input_lst[:x+1], range(len(input_lst))))
实现说明
- 无任何显式的
for/while循环,仅用到len()、range()、map()、list()四个Python原生内置函数 - 运行逻辑:
- 用
len(input_lst)获取输入列表总长度,确定需要生成的子列表总数 - 用
range(len(input_lst))生成从0到长度-1的整数序列,对应子列表的切片索引偏移 - 用
map遍历整数序列,对每个偏移值执行切片操作input_lst[:x+1],拿到前x+1个元素组成的子列表 - 最后用
list()将map迭代器转为列表,直接得到符合要求的输出结果
- 用
- 该实现的时间复杂度和需求本身的性能下限完全一致,为O(n²)(n为输入列表长度,总共需要生成n(n+1)/2个元素),无额外性能损耗
内容的提问来源于stack exchange,提问作者loadbox
相关产品推荐
相关产品推荐

