代码优先:
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 < / strong>即可。第二个 66 仍在那里。我该如何删除它?
答案 0 :(得分:3)
最常见的方法是迭代列表的副本,而不是原始列表:
for k in li[:]:
#do stuff
我更喜欢使用列表理解:
[k for k in li if k != 66]
答案 1 :(得分:2)
请参阅我对Loop problem while iterating through a list and removing recurring elements的回答,了解您遇到此问题的原因。
在这种情况下,你可以这样做:
li = [item for item in li if item != 66]
制作新名单。
如果你必须做很多remove
,列表理解也会更快,因为每个remove
必须遍历整个列表,而列表理解只遍历整个列表一次。 / p>
答案 2 :(得分:0)
我想你想做的是this。所以在你的情况下:
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
搜索第一次出现并删除它。所以你有效地多次迭代列表。