在python中列表(设置)操作O(1)?

时间:2018-04-23 23:43:44

标签: python list dictionary set

如果我们想从一个集合构建一个列表,我们可以做

[k for k in set]

这是O(n)操作,同时:

dict.keys()

是O(1) 根据{{​​3}}

因此,据我所知,dict使用set作为其基础数据结构的关键,是list(set) O(1)?这是如何实现的?

a = set(range(n))
s = list(a) # is this operation O(1)?

1 个答案:

答案 0 :(得分:1)

  

因此,据我所知,dict使用set作为其基础数据结构的关键。

嗯,不,不是真的。相反的方式是更接近的类比:在实现中,set就像一个dict,其中包含所有空值。 dict在Python中排在第一位,set在Python 2.2(2000年7月)之前才出现 - 请参阅PEP 218

另外值得一提的是,自Python 3以来dict.keys()是O(1)。在Python 2中,它是O(n),你应该使用dict.viewkeys()作为键“view”(类似集合的接口)

  

list(set) O(1)?

不,它是O(n) - 与列表理解相同。

  

这是如何实现的?

设置支持the iterator protocol