可能重复:
如何在保留顺序的同时从Python中的列表中删除重复项?
在Python中,从列表中删除重复项的最快算法是什么,以便所有元素在保留顺序的同时是唯一的?
我想知道是否有一个函数执行以下操作:
以列表作为参数:
list = [ 3 , 5 , 6 , 4 , 6 , 2 , 7 , 6 , 5 , 3 ]
Run Code Online (Sandbox Code Playgroud)
并删除列表中的所有重复以获取:
list = [ 3 , 5 , 6 , 4 , 2 , 7 ]
Run Code Online (Sandbox Code Playgroud)
我知道你可以将它转换成字典,并使用字典不能重复的事实,但我想知道是否有更好的方法.
谢谢
有关实现此目的的三种方法,请参阅Python文档.从该站点复制以下内容.将示例'mylist'替换为您的变量名称('list').
第一个示例:如果您不介意重新排序列表,请对其进行排序,然后从列表末尾进行扫描,删除重复项:
if mylist:
mylist.sort()
last = mylist[-1]
for i in range(len(mylist)-2, -1, -1):
if last == mylist[i]:
del mylist[i]
else:
last = mylist[i]
Run Code Online (Sandbox Code Playgroud)
第二个示例:如果列表的所有元素都可以用作字典键(即它们都是可以清除的),这通常会更快:
d = {}
for x in mylist:
d[x] = 1
mylist = list(d.keys())
Run Code Online (Sandbox Code Playgroud)
第三个例子:在Python 2.5及更高版本中:
mylist = list(set(mylist))
Run Code Online (Sandbox Code Playgroud)
即使您说您不一定要使用 a dict,但我认为 anOrderedDict在这里是一个干净的解决方案。
from collections import OrderedDict
l = [3 ,5 ,6 ,4 ,6 ,2 ,7 ,6 ,5 ,3]
OrderedDict.fromkeys(l).keys()
# [3, 5, 6, 4, 2, 7]
Run Code Online (Sandbox Code Playgroud)
请注意,这会保留原始顺序。
| 归档时间: |
|
| 查看次数: |
660 次 |
| 最近记录: |