【发布时间】:2020-08-07 04:45:26
【问题描述】:
我有一个包含更多列表和零的列表。
checks =[[1], [2, 6, 10, 9], [3, 7, 8], [4], [5], 0, 0, 0, 0, 0, [11]]
我打算删除所有零和长度为 1 的列表。我编写了以下代码并期望输出为:
checks = [[2,6,10,9], [3,7,8]]
相反,输出结果是:
checks = [[2,6,10,9], [3,7,8], [5]]
代码:
while 0 in checks:
checks.remove(0)
for x in checks:
if len(x) < 2:
checks.remove(x)
print(checks)
为什么我的代码没有从给定列表中删除单个元素列表 [5]?我在许多 IDE 上运行了这段代码,但结果是一样的。是 Python 的一些缺陷还是我错过了一些关键概念?如果有人能解释 Python 的这种行为并给出解决方法,那将非常有帮助。
【问题讨论】:
-
在迭代列表时不要从列表中删除项目(就像您在
for循环中一样) -
@Aman Sharma,在
for loop中,当您删除项目时,不仅项目会被删除,而且您的列表也会随之更新。但是x会为每个新的迭代迭代下一个索引,即它下次不会检查相同的索引。