是一个基本的数学模型,指若干不同对象形成的总体。类似于只有键(key)的字典,简单来说,集合内的元素不会重复。
字典的字面量使用花括号({}
)包裹一组值表示,例如:
fruits:set[str] = {'Apple', 'Orange', 'Strawberry', 'Banana', 'Pineapple'}
digraph HashTable {
node [shape=record, fontname="Helvetica"];
fruits [label="fruits", shape=ellipse];
// 桶的结构
bucket1 [label="Apple"];
bucket2 [label="Orange"];
bucket3 [label="Strawberry"];
bucket4 [label="Banana"];
bucket5 [label="Pineapple"];
// 指向桶
fruits -> bucket1 [label="Apple"];
fruits -> bucket2 [label="Orange"];
fruits -> bucket3 [label="Strawberry"];
fruits -> bucket4 [label="Banana"];
fruits -> bucket5 [label="Pineapple"];
}
类型标注 set[str]
,表示类型是 元素类型为 str
的集合。
创建空集需要使用 set()
,而不能使用 {}
,因为后者表示空字典。
可以通过列表或元组来创建集合,源列表或元组中重复的值会被过滤,从而实现去重:
和字典类似,使用 in
来判断元素是否在集合中:
使用 add
方法添加元素:
可以使用 remove
或 discard
方法删除元素:
remove
- 删除指定元素,元素不存在时产生错误
discard
- 删除指定元素,元素不存在时不产生错误
可以使用 clear
方法清空集合:
可以使用 update
方法合并集合:
通过 intersection
方法或 &
运算符,可以求集合的交集(包含两个集合中相同的元素):
这两种方式都不改变原集合,而是返回一个新的集合。
使用 intersection_update
方法,则修改原集合为交集。
通过 union
方法或 |
运算符,可以求集合的并集(包含两个集合的元素组):
这两种方式都不改变原集合,而是返回一个新的集合。
使用 update
方法,则修改原集合为并集。
通过 difference
方法或 |
运算符,可以求集合的差集(包含只在第一个集合中存在的元素):
这两种方式都不改变原集合,而是返回一个新的集合。
使用 difference_update
方法,则修改原集合为差集。
通过 symmetric_difference
方法=可以求集合的对称差集(包含两个集合中不同的元素):
这两种方式都不改变原集合,而是返回一个新的集合。
使用 symmetric_difference_update
方法,则修改原集合为对称差集。
如果集合 A 的所有元素都被 集合 B 包含,则 A 是 B 的子集,B 是 A 的超集。
在此基础上,如果 A 和 B 不相等,则称 A 是 B 的真子集,B 是 A 的真超集。
Python 通过比较运算符 <
、<=
、>
、>=
判断集合关系:
关系 | 说明 |
---|---|
A <= B |
A 是 B 的子集 |
A < B |
A 是 B 的真子集 |
A >= B |
A 是 B 的超集 |
A > B |
A 是 B 的真超集 |