为什么Python的set()返回一个设置项而不是列表

时间:2019-02-20 10:55:28

标签: python

我经常使用set()从列表中删除重复项。这样做之后,我总是直接将其更改回列表。

a = [0,0,0,1,2,3,4,5] 
b = list(set(a))

为什么set()返回set项而不是列表?

type(set(a)) == set # is true 

我无法理解的set项有用途吗?

4 个答案:

答案 0 :(得分:2)

是的,set有很多用途。他们here记录了许多不错的操作,而这些操作没有列出。一个非常有用的区别是,成员资格测试(x in a)比列表测试要快得多。

答案 1 :(得分:1)

正如已经提到的,我不会讨论为什么set不返回list,而是像您所说的那样:

我经常使用set()从列表中删除双打。完成此操作后,我总是直接将其更改回列表

如果您真的讨厌回溯将其更改为列表,则可以使用OrderedDict

source_list = [0,0,0,1,2,3,4,5]
from collections import OrderedDict
print(OrderedDict((x, True) for x in source_list).keys())

输出:

odict_keys([0, 1, 2, 3, 4, 5])

答案 2 :(得分:1)

好吧,双倍意味着重复吗?和set()将始终返回一个集合,因为它是python中的数据结构(如列表)。调用set时,正在创建set()的对象。 有关集的其余信息,您可以在这里找到 https://docs.python.org/2/library/sets.html

答案 3 :(得分:0)

如前所述,对于某些操作,如果使用set而不是list,则速度更快。 Python Wiki具有查询TimeComplexity,其中给出了各种数据类型的运算速度。请注意,如果列表或集合中的元素很少,则很可能不会注意到差异,但是元素越多,它就越重要。 请注意,例如,如果您要就地删除,对于list,它是O(n),这意味着列表长10倍将需要10倍的时间,而sets.difference_update(t),其中设置了st设置了一个要从s中删除的元素,时间为O(1),即与{{ 1}}。

相关问题