如何在Python中去除列表中所有重复项,只保留一个元素?

1 投票
1 回答
2356 浏览
提问于 2025-04-17 05:17

我已经知道怎么通过使用 set 来去掉 List 中的所有重复项:

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 个回答

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]

撰写回答