如何在Python中去除列表中所有重复项,只保留一个元素?
我已经知道怎么通过使用 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]