您的位置:首页 > 理论基础 > 数据结构算法

python内置数据结构之set

2017-10-08 12:37 344 查看

内置数据结构set

定义:
可变的、无序的、不重复的元素的集合.
常用于: 去重
set是可迭代对象
set中的元素必须是可hash的
set中的值不能通过索引访问
set定义,初始化
set() -> new empty set object
set(iterable) -> new set object

注意:
定义set时,可用{}来表示,但不能为空
如下:
>>> type({})      # '{}'表示定义的是dict
<class 'dict'>
>>> type({1})
<class 'set'>


set方法


add(elem)
添加一个元素至set

update(*others)
将可迭代对象添加至set



remove(elem)
删除set中指定的元素,如果找不到抛出KeyError

discard(elem)
删除set中指定的元素,如果找不到,就什么都不做

pop() --> elem
随机弹出set中某元素,并输出至标准输出
如果找不到抛出KeyError

clear()
清空set内所有元素

问: 为什么抛出的异常是KeyError,而不是ValueError?
说明set是通过Key来查询值是否存在,而不是通过value的对比.



非线性结构,无法索引



修改,还不如直接删除,再增一个新元素


set成员运算符比较
比较set和list查询效率:
lst1 = list(range(100))
lst2 = list(range(1000000))
-1 in lst1、-1 in lst2     # 使用此语句测试效率
s1 = set(range(100))
s2 = set(range(1000000))
-1 in s1、-1 in s2         # 使用此语句测试效率

测试结果:
list相差数量级的倍数
set相差无几


set和线性结构
线性结构在查询效率方面,查询的数据的量级越大,所消耗的时间则会越多.
set、dict等,内部使用hash作为key,在查询上时间复杂度为O(1).即查询时间,跟数据量级无关.


可hash对象
整型
字符型
tuple
None
bytes(保存的是对应的字符编码)

使用内置的hash()函数来判断此对象是否是可hash的.

例:
>>> hash([1])          # 列表不可hash
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'list'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  set python