python中的一个小问题
def f(lst):for each in lst:
if each%2==1:
lst.remove(each)
return lst
运行了f()
结果却是
没有办法理解得了,不知道哪里错了? 问题的原因在于你边删除元素边访问列表
def f(lst):
for each in lst:
if each % 2 == 1:
lst.remove(each)
print(each)
print(lst)
return lst
print(f())
1
3
6
7
本帖最后由 Daniel_Zhang 于 2021-4-16 22:58 编辑
each 访问第 0 个元素 1, 移除
each 访问第 1 个元素,但是 1 已经被移除,此时的列表为 , 所以第 1 个元素为 3,移除
each 访问第 2 个元素,但是 3 已经被移除,此时的列表为 , 所以第 2 个元素为 6, 不移除
each 访问第 3 个元素,此时的列表为 , 所以第 3 个元素为 7,移除
此时的列表为 , 达到了 list 的末尾,不再继续执行 for 循环
所以结果为
如果需要解决这个问题,可以尝试如何在修改列表时,不会影响当前的访问元素所处的位置
如:倒序访问并删除元素 改成 for each in lst[:]:
页:
[1]