为什么在将列表转换为set时订购该集合?

xha*_*awn 5 python list set

我试图编写一个函数来从Python中的列表中删除重复项.

但是在我这样做之后,我发现列表是通过将其转换为set并返回列表来排序的.

这是脚本:

>>> l = [9,10,10,11,1,1,1,22,2,2,2]
>>> s = set(l)
>>> s
set([1, 2, 9, 10, 11, 22])
>>> l2 = list(s)
>>> l2
[1, 2, 9, 10, 11, 22]
>>> l2 = list(set(l))
>>> l2
[1, 2, 9, 10, 11, 22]
>>> 
Run Code Online (Sandbox Code Playgroud)

s订购该套装(至少在打印时订购).

订购的原因是什么?

如果我通过运行以下方法删除重复项,那么时间复杂度是多少:

def remove_duplicates(nums):
    return list(set(nums))
Run Code Online (Sandbox Code Playgroud)

Ray*_*ger 5

list(set(data))方法的运行时间为O(n).

该集合作为整数如何散列的工件排序.对于其他输入,数据将从排序顺序中挤出.

要克服任意排序,请使用这个也是O(n)的习语: list(collections.OrderedDict.fromkeys(data))