如何从列表中删除除Python中的一个元素之外的所有重复项?

时间:2011-10-30 12:29:35

标签: python performance list

我已经知道如何使用Listset删除所有重复项:

ls = list(set(ls))

我想知道的是有什么方法可以删除除一个元素实例之外的所有重复项,与上述方法一样有效吗?

ls = [1, 2, 3, 3, 3, 4, 4]
#i want to keep 4, no matter if it is duplicate but want to remove duplicates from rest
so the output should be:
ls = [1, 2, 3, 4, 4]

一种可能的解决方案是迭代元素并使用条件检查。我正在寻找最好的解决方案。

1 个答案:

答案 0 :(得分:4)

一种方法是添加回额外删除的4

sl = list(set(ls))
sl += [4] * (ls.count(4) - 1)

或者,只需将4附加到新列表:

s = set()
sl = []
for elem in ls:
    if elem == 4 or elem not in s:
        sl.append(elem)
        s.add(elem)

使用set允许持续时间成员资格测试;如果你刚使用了列表那就是O(n)。

如果需要,可以将其编写为列表解析,但正常循环更具可读性:

s = set()
sl = [s.add(elem) or elem for elem in ls if elem == 4 or elem not in s]