【发布时间】:2021-02-25 02:11:12
【问题描述】:
我正在尝试编写一个函数来删除列表中的重复项而不进行排序,但是在大列表中需要很长时间,有没有比这更快的方法?
from time import time
def delrepeat(rlist):
ti = time()
repeated = []
for i in list(set(rlist)):
rc = rlist.count(i)
if rc > 1:
repeated.append((i, rc))
newlist = list(reversed(rlist))
for repeat in repeated:
i, rc = repeat
while rc > 1:
newlist.pop(newlist.index(i))
rc -= 1
print(time()-ti)
return list(reversed(newlist))
delrepeat([3,2,1,3,5,3]*10000)
# --------------------------
# 5.181169271469116
# [3, 2, 1, 5]
【问题讨论】:
-
如果您不需要订购,
set()将删除重复项。所以你可以做list(set())。 -
如果你需要维护秩序,你可以创建一个字典来保存你已经看过的元素。
-
@HunterMcMillen 不需要字典,一套就足够了。
-
@MichaelButscher 正如 at80 已经提到的那样,具有集合的解决方案 不会 保留初始顺序。这就是为什么我在我的声明前加上“如果你需要维持秩序”
-
@HunterMcMillen 我认为他们的意思是你只需要一个集合来存储看到的元素。
标签: python list algorithm duplicates