繁体   English   中英

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

[英]Why does Pythons' set() return a set item instead of a list

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

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

为什么set()返回一个set项,而不是简单的列表?

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

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

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

如前所述,我将不介绍为什么set不返回list而是像您所说的那样:

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

如果您真的讨厌回到将其更改为列表,则可以使用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])

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM