从列表中删除重复的值

时间:2012-05-11 03:56:06

标签: python list

代码优先:

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 仍在那里。我该如何删除它?

3 个答案:

答案 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 搜索第一次出现并删除它。所以你有效地多次迭代列表。