尝试使用列表理解 https://docs.python.org/3/tutorial/datastructures.html#list-comprehensions:
>>> a = [1,9,2,10,3,6]
>>> [x for x in a if x <= 5]
[1, 2, 3]
这说的是,“制作一个新的列表x值其中x来自a但前提是x小于或等于阈值5.
问题与枚举() and pop()方法是它在迭代列表时改变列表——有点类似于当你仍然坐在树枝上时锯掉树枝。所以当(i, x)
is (1, 9)
, the pop(i)变化a to [1,2,10,3,6]
,但随后迭代前进到(2, 10)
意味着该值2永远不会被检查。它从那里分崩离析。
FWIW,如果您需要就地改变列表,只需用切片重新分配它即可:
a[:] = [x for x in a if x <= 5]
希望这可以帮助 :-)