python中简单的控制流问题

想要将一个列表中大于15的整数删去,代码如下。然而,运行后只删除了16,18等,17,19,21,23等没有删除
控制流为何出了问题?
烦请解答,感激不尽

a=[11, 12, 13,14, 15, 16,17, 18,19,20,21,22,23]

for k in a:
    print (k)
    if k >15:
        a.remove(k)
        continue

print(a)
阅读 1.7k
3 个回答

在对一个list遍历的时候,不要修改list里面的内容

可以试试下面的代码:

a=[11, 12, 13,14, 15, 16,17, 18,19,20,21,22,23]
b = []
for i in a:
    if i <= 15:
        b.append(i)
print(b)

当然写成这样更清楚:

a=[11, 12, 13,14, 15, 16,17, 18,19,20,21,22,23]
a = [i for i in a if i <= 15]
print(a)

问题在于:你不能在 for in 遍历 list 的同时去修改该 list。

正确的做法:

  1. 把符合条件(小于等于 15)的数加到另外一个 list 里
  2. 使用列表推导生成新的 list

犯了一个常见的错误,边遍历边修改了list的结构。

In [5]: a=[11, 12, 13,14, 15, 16,17, 18,19,20,21,22,23]

In [6]: b  = [i for i in a if i <= 15]

In [7]: b
Out[7]: [11, 12, 13, 14, 15]

In [8]:
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题