Python也包含有 集合 类型。集合是由不重复元素组成的无序的集。它的基本用法包括成员检测和消除重复元素。集合对象也支持像 联合,交集,差集,对称差分等数学运算。

花括号或 set() 函数可以用来创建集合。注意:要创建一个空集合你只能用 set() 而不能用 {},因为后者是创建一个空字典,这种数据结构我们会在下一节进行讨论

1.集合定义

>>> type({1,2,3,4})
<class 'set'>

>>> type({})
<class 'dict'>

# 定义一个空集合
>>> aset = set()
>>> aset
set()

# 集合不重复
>>> set({1,2,1,2})
{1,2}

>>> a = set('abracadabra')
>>> a
{'d', 'b', 'a', 'r', 'c'}

# 列表推导式
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'r', 'd'}

2.集合方法

函数名描述示例结果
set.update(set)更新集合aset = {1,2,3,4}
aset.update({7,8})
{1, 2, 3, 4, 7, 8}
set.discard(obj)移除集合元素,移除不存在的元素不会报错{1,2,3,4}.discard(5){1,2,3,4}
set.remove(obj)移除不存的元素会报错{1,2,3,4}.remove(4){1,2,3}
set.pop()移除集合中最后一个元素{1,2,3}.pop()3
set.add(obj)在集合中追加一个元素{1,2,3}.add(9){1,2,3,9}
set.clear()清空集合{1,2,3}.clear(){}

3.集合操作

>>> 1 in {1,2,3}
True

>>> 1 not in {1,2,3}
False

4.交集

intersection, intersection_update,也可以使用a&b

>>> aset = {11,22,33}
>>> bset = {33,44,55}
# 取交集,赋给新值
>>> aset.intersection(bset) 
{33}

>>> aset
{11,22,33}

#取交集并更新自己
>>> aset.intersection_update(bset)
>>> aset
{33}

# 取交集
>>> aset & bset

5.并集

union,也可以使用ab
>>> aset = {11,22,33}
>>> bset = {22,44,55}
>>> tmp = aset.union(bset)
>>> aset
{33, 11, 22}
>>> tmp
{33, 22, 55, 11, 44}

>>> aset | bset
{33, 22, 55, 11, 44}

6.差集

difference, difference_update,也可以使用a-b

>>> aset = {11,22,33}
>>> bset = {22,55}
>>> tmp = aset.difference(bset) #找到aset中存在,bset中不存在的集合,返回新值
>>> tmp
{33, 11}

>>> aset - bset
{33, 11}

>>> aset
{11,22,33}

>>> tmp2 = aset.difference_update(bset) #找到aset中存在,bset中不存在的集合,覆盖掉aset
>>> tmp2 
None

>>> aset
{33,11}

7.包含关系

两个集合之间一般有三种关系,相交、包含、不相交。在Python中分别用下面的方法判断:

如果要真包含关系,就用符号操作><

>>> aset = {11,22,33}
>>> bset = {22}
>>> aset.isdisjoint(bset) #判断是否不存在交集(有交集False,无交集True)
False

>>> aset.issubset(bset) #判断se是否是be的子集合
False

>>> aset <= bset 
False

>>> aset.issuperset(bset) #判断se是否是be的父集合
True

>>> aset >= bset
True

8.合并

symmetric_difference, symmetric_difference_update

>>> aset = {11,22,33}
>>> bset = {22}
>>> tmp = aset.symmetric_difference(bset)

>>> tmp
{33, 11}

>>> aset
{33, 11, 22}

>>> tmp2 = aset.symmetric_difference_update(bset)
>>> tmp2
None

>>> aset
{33,11}

9.集合转换

集合可以转换为list、tuple、str

>>> aset = {1,2,3,4}
>>> list(aset)
[1, 2, 3, 4]

>>> tuple(aset)
(1, 2, 3, 4)

>>> str(aset)
'{1, 2, 3, 4}'

10.不可变集合

Python提供了不能改变元素的集合的实现版本,即不能增加或删除元素,类型名叫frozenset。需要注意的是frozenset仍然可以进行集合操作,只是不能用带有update的方法。如果要一个有frozenset中的所有元素的普通集合,只需把它当作参数传入集合的构造函数中即

>>> aset = frozenset("hello")
>>> aset
frozenset({'o', 'l', 'h', 'e'})

>>> aset = set(aset)
>>> aset.add(12)
>>> aset
{'l', 12, 'e', 'h', 'o'}

python3.7 入门教程

Python 准备工作(1) Python 基本数据类型 Number(2) Python 字符串 str(3) Python 列表List(4) Python 元组tuple(5) Python 集合set(6) Python 字典 dict(7) Python 变量(8) Python 运算符(9) Python 条件语句(10) Python 循环语句(11) Python 包 模块(12) Python 函数一(13) Python 函数二(14) Python 面向对象(15) Python 正则(16) Python json(17) Python 枚举(18) Python 闭包(19) Python 装饰器(20) Python 杂记(21) Python with(22)