Set: 可变的,无序的,不重复 \color{#FF3030}{可变的,无序的,不重复} 可变的,无序的,不重复的元素的集合
初始化
#空集合初始化:
set() -> new empty set object
#非空集合初始化:
set(iterable) -> new set object
对集合内元素iterable的要求:
- 元素必须可hash(hash可粗略的理解不可变类型,即list这种数据结构是不可做为set的元素)
- 不可索引(因无序)
- 可迭代
set的特征
集合的元素有三个特征:
1.确定性:集合中的元素必须是确定的;
**2.互异性:**集合中的元素互不相同,如:集合A={1,a},则a不能等于1);
**3.无序性:**集合中的元素没有先后之分,如:{3,4,5}和{3,5,4}算作同一个集合
set的方法
名称 | 作用 | 说明 | |
---|---|---|---|
新增 | add(elem) | 增加元素到set中 | 如果元素不存在,则什么都不做(元素不可重复决定) |
删除 | pop() -> item | 移除任意元素(因set无序) | 空集使用此方法返回KeyError异常 |
删除 | discard(elem) | 从set中移除一个指定元素 | 元素不存在,什么都不做 |
修改 | 无修改概念,因为元素不可重复,所以修改的值一定是个新值,等效于新增 | ||
查询 | 非线性结构无法查询 | ||
遍历 | 可迭代所有元素 | ||
成员运算符 | in 和 not in | 判断一个元素在/不在SET内 | 原理:将set的值做为Key,对key进行hash,用hash值查找,时间复杂度为O(1) |
集合的运算
类型 | 结果 | 方法 | 是否就地修改 |
---|---|---|---|
交集 | 返回合多个集合合并后的新的集合 | union(*other) | 否 |
update(*other) | 是 | ||
并集 | 返回多个集合的共同元素 | intersection(*others) | 否 |
intersection_update(*others) | 是 | ||
差集 | 集合AB,返回属于A不属于B的元素 | difference_update(*others) | 否 |
difference(*others) | 是 | ||
对称差集(补集) | 集合AB,返回属于A和B交集的元素 | symmetric_difference(others) | 否 |
symmetric_difference_update(others) | 否 |