-
集合概念
-
无序的, 不可随机访问的, 不可重复的元素集合
与数学中集合的概念类似,可对其进行交、并、差、补等逻辑运算
分为可变集合和非可变集合
-
set
为可变集合(增删改) -
frozenset
不可变集合(创建好之后, 无法增删改)
定义
- 可变集合set
- s = {1,2,3,4}
s = set(iterable)
其中iterable可以是字符串、列表、元组、字典等
但是为dict时,只会获取提Key作为set的元素
- 集合推导式
s = set(x**2 for x in range(1, 10) if x % 2 == 0)
s = {推导式}
- s = {1,2,3,4}
- 不可变集合frozenset
- fs = frozenset(iterable)
其中iterable可以是字符串、列表、元组、字典等
但是为dict时,只会获取提Key作为set的元素
- 集合推导式
s = frozenset(x**2 for x in range(1, 10) if x % 2 == 0)
- fs = frozenset(iterable)
注意
1. 创建一个空集合时, 需要使用set() 或者 frozenset(), 不能使用 s = {}
会被识别成为字典
2. 集合中的元素, 必须是可哈希的值
如果一个对象在自己的生命周期中有一哈希值(hash value)是不可改变的,
那么它就是可哈希的(hashable)的
3. 如果集合中的元素值出现重复, 则会被合并为1个
常用操作
单一集合操作
- 可变集合
-
增
-
s.add(element)
注意: 必须保证添加的元素是可哈希的值
删
-
s.remove(element)
指定删除set对象中的一个元素 如果集合中没有这个元素,则返回一个错误
s.discard(element)
指定删除集合中的一个元素 若没有这个元素,则do nothing
s.pop(element)
随机删除并返回一个集合中的元素 若集合为空,则返回一个错误
s.clear()
清空一个集合中的所有元素
改
-
元素为不可变类型, 不能修改
查
-
无法通过索引或key进行查询
1. 通过 for in 进行遍历
2. 通过迭代器进行访问
- 不可变集合
不能增删改
-
查
-
- 通过 for in 进行遍历
-
- 通过迭代器进行访问
集合之间操作
-
交集
-
intersection(Iterable)
逻辑与 ‘&’
intersection_update(…)
交集计算完毕后, 会再次赋值给原对象
会更改原对象
只适用于可变集合
并集
-
union()返回并集
逻辑或 '|'返回并集
update()更新并集
差集
-
difference()
算术运算符减 ‘-‘
difference_update()
判定
-
isdisjoint()两个集合不相交
issuperset()一个集合包含另一个集合
issubset()一个集合包含于另一个集合
注意 可变与不可变集合混合运算, 返回结果类型以运算符左侧为主