5. 集合 (set)

什么是集合(set)

一种非线性的数据结构,是可变的无序的(散落)不重复的元素的可迭代的集合类型。

set的定义(初始化)

s1 = set()
s2 = {1, 2, 3}
s3 = set(range(5)) #{0, 1, 2, 3, 4}
s4 = set("abcabcde") #{a, b, c, d, e}

注意!s5 = {} 定义出来的是字典类型,不是set类型。

set的HASH(哈希)

set会哈希所有的值。

去重就是基于哈希的。

listbytearraydictset不可hash,因此set在中不能出现。

set的增删

增删都是就地修改

add操作

增加一个元素

s2.add(4)

update操作

增加可迭代对象(任意个)

s2.update(range(5))
s2.update(range(6),range(10),['a','b'])

remove操作

移除一个元素

如果没有,将会返回KeyError

s2.remove(4)

pop操作

随机移除一个元素并返回

s2.pop()#无参数

discard操作

移除一个元素

如果没有,不返回错误 。

s2.disard(9)

clear操作

移除所有元素

set的查改

修改

set不能修改

查询

无法索引,能够遍历迭代所有元素。 时间复杂度O(1)

set间的操作

并集

union(*others)

返回和多个集合合并后的新集合

可以用| 表示。

update(*others)

多个集合合并,就地修改

可以用|= 表示。

交集

intersection(*others)

返回和多个集合的交集

可以用& 表示。

intersection_update(*others)

多个集合的交集,就地修改

可以用&= 表示。

差集

difference(*others)

返回和多个的差集

可以用- 表示。

difference_update(*others)

获取差集,就地修改

可以用-= 表示。

对称差集

symmetric_difference(*others)

返回和多个的对称差集(并集与交集的差集)

可以用^ 表示。

symmetric_difference_update(*others)

获取对称差集,就地修改

可以用^= 表示。

set间的比较

子集

issubset(object)
<=

真子集

<

超集

issuperset(object)
>=

真超集

>

是否没有交集

isdisjoint(object)

没有交集返回True

Last updated