先上代码:
li = [32,45,23,66,66,89,27]
print li
for k in li:
if k == 66:
li.remove(k)
print li
结果:
> [32, 45, 23, 66, 66, 89, 27]
> [32, 45, 23, 66, 89, 27]
这是我的问题:当我删除第一个66时,第二个和其他项目将向前移动一个索引,下一个k
将是89。第二个66还在。我怎样才能删除它?
最常见的方法是遍历列表的副本,而不是原始列表:
for k in li[:]:
#do stuff
但是,我更喜欢使用列表理解:
[k for k in li if k != 66]
请参阅我对循环问题的回答,同时遍历列表并删除重复出现的元素,以了解您遇到此问题的原因。
在这种情况下,您可以这样做:
li = [item for item in li if item != 66]
做一个新的清单。
如果你必须做很多 s,列表推导也会更快,remove
因为每个remove
都必须遍历整个列表,而列表推导只遍历整个列表一次。
我猜你想要做的是这个。所以在你的情况下:
li = [32,45,23,66,66,89,27]
print li
li[:] = [x for x in li if x != 66]
print li
当然,如果你想 用普通的 for 循环来做,你总是可以li
反向迭代:
li = [32,45,23,66,66,89,27]
print li
for k in reversed(li):
if k == 66:
li.remove(k)
print li
但请注意,这是非常低效的。因为remove
搜索第一次出现并删除它。因此,您可以多次有效地迭代列表。