Python如何增量传递列表切片给函数并获取逐次返回结果
错误原因
你把列表切片的规则用错了。
Python里写lst[:end]做切片的时候,end传的是切片截止的位置,切出来的列表长度就是end(当end不超过列表总长度时),根本不是你循环里遍历到的列表元素值。
你写的for num in lst1,每次循环拿到的num是lst1里存的实际数字,也就是依次拿到1、6、6、7、7、5,代到切片里实际跑的逻辑是:
- 第一次
lst1[:1]:切前1个元素,返回长度1,这步刚好蒙对 - 第二次
lst1[:6]:直接切前6个元素——你的lst1总共就6个元素,直接返回整个列表,长度直接跳到6 - 第三次还是
lst1[:6],结果还是6 - 后面的
lst1[:7]因为end超过列表总长度,Python不会报错,还是返回整个列表,长度6;最后一次lst1[:5]返回长度5,完全不可能按你想的输出1、2、3逐次递增。
修复方案
你需要按「截取长度从1逐次加1到列表总长度」的逻辑传参,不要遍历列表元素本身,两种常用实现:
方案1:按长度遍历切片
直接遍历1到列表总长度的序列作为切片的终止位置,代码最简洁:
def some_lst_func(lst): foo = len(lst) return foo lst1= [1, 6, 6, 7, 7, 5] for slice_len in range(1, len(lst1) + 1): print(some_lst_func(lst1[:slice_len]))
运行后输出就是你期望的逐次递增结果:
1 2 3 4 5 6
方案2:动态构建增量列表
如果你需要更灵活的增量逻辑(比如后续要对传入的增量列表做修改,不想影响原列表),可以遍历原列表元素,每次把元素追加到临时列表后再传入函数:
temp_lst = [] for num in lst1: temp_lst.append(num) print(some_lst_func(temp_lst))
这种写法不会依赖切片规则,哪怕原列表里的元素值和长度重合也不会出逻辑错误,运行结果和方案1完全一致。
内容的提问来源于stack exchange,提问作者Shaun Potts
相关产品推荐
相关产品推荐

