我已经知道如何使用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]


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

最佳答案

一种方法是重新添加额外删除的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]

关于python - 如何从列表中删除除Python中的一个元素以外的所有重复项?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7944895/

10-13 03:45