文章目录
- 1. 集合set的定义
- 2. 创建集合 set([iterable])
- 3. 集合的特性
- 3.1 集合没有索引(也就没法切片,因为本身集合是无序的)
- 3.2 集合元素不能重复
- 3.3 集合不能拼接
- 4. 集合的常用方法
- 4.1 增
- add()
- update()
- 4.2 删
- remove()
- pop()
- 4.3 交集: inintersection 或者 &
- 4.3.1 inintersection
- 4.3.2 inintersection_update
- 4.3.3 &
- 4.3.3 &=
- 4.4 并集:union 或 |
- 4.5 差集:difference 或者 —
- 4.6 异或集:symmetric_difference 或者 ^\
- 4.7 子集/超集:
- 子集:issubset 或者 <=
- 真子集 <
- 超集:s1.issuperset 或 >
- 4.8 判断集合是否互斥:isdisjoint
1. 集合set的定义
- 集合(set)是一个无序的不重复元素集
- 可以使用大括号 { } 或者 set( ) 函数创建集合
- 创建一个空集合必须用 set( ) 而不是 { },因为 { } 是用来创建一个空字典
2. 创建集合 set([iterable])
- 通过传入可迭代对象于set函数来创建集合。当不传入参数时就是创建空集合
empty_s = set()
print(empty_s) # set()
s = set([1,2,2,3])
print(s) # {1, 2, 3}
- 可以通过集合的创建方式来对一些可迭代对象去除重复值。
t1 = (1,2,2,3,3) # 需要去重
t1 = tuple(set(t1))
print(t1) # (1, 2, 3)
3. 集合的特性
- 集合没有索引、切片、重复*、拼接+的特性,集合只有成员操作符、迭代循环遍历、枚举的特性
3.1 集合没有索引(也就没法切片,因为本身集合是无序的)
s = set([1,2,3])
s[0] # 报错 TypeError: 'set' object is not subscriptable
s[0:2] # 报错 TypeError: 'set' object is not subscriptable
3.2 集合元素不能重复
s = set([1,2,3])
s = s*3 # 报错 TypeError: unsupported operand type(s) for *: 'set' and 'int'
3.3 集合不能拼接
s1 = set([1,2,3])
s2 = set([4,5,6])
s1+s2 # TypeError: unsupported operand type(s) for +: 'set' and 'set'
4. 集合的常用方法
4.1 增
add()
- 添加一个没出现过的元素到集合中
s = {1, 2, 3}
s.add(4)
print(s) # {1, 2, 3, 4}
update()
- s.update(iteratable object)参数为可迭代对象。会将iteratable object里元素中没有出现在s里的元素添加到s
s = {1, 2, 3}
other = (3,4,5) # 也可以是集合、列表
s.update(other)
print(s) # {1, 2, 3, 4, 5}
4.2 删
remove()
- 语法: s.remove(x)
- 作用:删除s中的x元素,无返回值,x不存在于s会报错。
s = {1, 2, 3}
s.remove(2)
print(s) # {1, 3}
pop()
- 语法: s.pop()
- 作用,删除集合s的一个元素并且返回它。
s = {1, 2, 3}
s.pop() # 返回1
print(s) # {2, 3}
4.3 交集: inintersection 或者 &
- 求出两个集合(另外一个也可以不是集合,看下面)的共有元素。
4.3.1 inintersection
- 语法:s1.inintersection(可迭代对象)
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s3 = (3,4,5,6) # 元祖、列表等也行
s1.intersection(s2) # 返回{3, 4}
s1.intersection(s2) # 返回{3, 4}
4.3.2 inintersection_update
- 语法:s1.inintersection_update(可迭代对象s2)
- 作用:求出s1和s2的交集,并且更新s1=这个交集
s1 = {1,2,3,4}
s2 = {3,4,5,6}
s1.intersection_update(s2)
print(s1) # {3, 4}
4.3.3 &
- 语法: s1 & s2 ,这时候s1和s2必须是集合
- 等价于上面inintersection方法
4.3.3 &=
- 语法: s1 &= s2 ,这时候s1和s2必须是集合
- 等价于上面inintersection_update方法,会更新s1
4.4 并集:union 或 |
- 语法:s1.union(s2) 或者 s1 | s2
- 返回既出现在s1也出现在s2里的元素集合
- 其他细节等同于上面交集,没有方法 union_update,但是可以 |=
4.5 差集:difference 或者 —
- 语法:s1.difference(s2) 或者 s1 - s2
- 返回只在s1不出现在s2的元素
- 其他细节等同于上面交集,有方法difference _update,也可以 s1 -= s2
4.6 异或集:symmetric_difference 或者 ^\
- 语法:s1.symmetric_difference(s2) 或者 s1^s2
- 返回只在s1出现以及只在s2出现的元素集合。可以认为是s1-s2以及s2-s1的并集
- 其他细节等同于上面交集,有方法symmetric_difference_update,也可以 s1 ^= s2
4.7 子集/超集:
子集:issubset 或者 <=
- 语法:s1.issubset (s2) 或者 s1 <= s2
- 作用:判断s1 是否是s2的子集。当s1=s2时,s1也是s2的子集
- 返回: True或者False
s1 = {1,2}
s2 = {1,2,3,4}
s3 = {1,2}
s1.issubset(s2) # True
s1.issubset(s3) # True
# 等价于
s1 <= s2 # True
s1 <= s3 # True
真子集 <
- 语法:s1 <= s2
- 作用:判断s1 是否是s2的真子集。当s1=s2时,s1不是s2的真子集
- 返回: True或者False
s1 = {1,2}
s2 = {1,2,3,4}
s3 = {1,2}
s1 < s2 # True
s1 < s3 # False
超集:s1.issuperset 或 >
- 和上面类似,不做阐述。
4.8 判断集合是否互斥:isdisjoint
s1 = {1,2}
s2 = {2,3}
s3 = {3,4}
s1.isdisjoint(s2) # False
s1.isdisjoint(s3) # True