Blizzard0319 发表于 2021-4-13 21:32:32

python中的一个小问题

def f(lst):
        for each in lst:
                if each%2==1:
                        lst.remove(each)
        return lst
运行了f()
结果却是
没有办法理解得了,不知道哪里错了?

Daniel_Zhang 发表于 2021-4-13 22:18:50

问题的原因在于你边删除元素边访问列表

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-13 22:22:49

本帖最后由 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 循环

所以结果为

如果需要解决这个问题,可以尝试如何在修改列表时,不会影响当前的访问元素所处的位置

如:倒序访问并删除元素

kogawananari 发表于 2021-4-13 22:46:30

改成 for each in lst[:]:
页: [1]
查看完整版本: python中的一个小问题