从唯一元素列表有效构建python集 - python

我列出了在构造上应该是唯一的元素列表。我的意思是,列表中没有元素会出现一次以上。

我想有效地测试该列表中是否存在某个项目,以及很多项目是否存在。

如果将列表转换为集合,则测试效率更高。

现在我的问题是关于如何有效地构建集合。

我猜想当我做my_set = set(my_list)时,python必须逐步构建集合,因此必须以某种方式测试列表中项目的成员资格。

考虑到我知道列表不包含重复项,这不是次优的吗?
有可能做得更好吗?
如果我有一个迭代器(而不是列表)(我仍然知道它将产生的项目将是唯一的),那么上述问题的答案是否会改变?

python大神给出的解决方案

由于set()使用哈希表(请参见How is set() implemented?),因此散列将花费比比较更多的时间,这是不可避免的。

如果您担心性能,我认为您的数据集非常大。要获得更好的性能,唯一的方法是首先创建set()并避免使用list()的中间内存。

$ python3 -m timeit 'set(list(range(100000)))'
100 loops, best of 3: 8.69 msec per loop

$ python3 -m timeit 'set(range(100000))'
100 loops, best of 3: 7.67 msec per loop

$ python3 -m timeit 'frozenset(range(100000))'
100 loops, best of 3: 7.68 msec per loop