set定义,初始化set() -> new empty set object
set(iterable) -> new set object
注意:
定义set时,可用{}来表示,但不能为空
如下:
>>> type({}) # '{}'表示定义的是dict
>>> type({1})
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 "", line 1, in
TypeError: unhashable type: 'list'