set 和 dict 类似,也是一组 key 的集合,但不存储 value。
由于 key 不能重复,所以,在 set 中,没有重复的 key,即:自动去重。
Set 元素中数字和字符参差顺序随机,故:集合不支持下标。
1 集合定义/截取
1.1 集合定义(大括号)
集合定义 | |
---|---|
python # 简单定义 s1 = { 'Peter', 'Joey', 'Bill', 'Susan'} print(s1) # 转换定义 list1 = [ 'Peter', 'Joey', 'Bill', 'Wade'] print(set(list1)) # 转换可自动 去重 + 排序 tup = 1, 1, 5, 9, 4, 6, 8, 2 s1 = set(tup) print(s1) |
python {'Peter', 'Joey', 'Susan', 'Bill'} {'Peter', 'Joey', 'Wade', 'Bill'} {1, 2, 4, 5, 6, 8, 9} |
集合推导式 | |
python lis = ['1', '2', '3', '4'] tup = {i ** 2 for i in range(len(lis)) if int(lis[i]) % 2 == 0} print(tup) |
python {1, 9} |
1.2 集合计算
集合计算 | ||
---|---|---|
```python s1 = {1, 2, 3} s2 = {2, 4, 6} # 取两集合的交集 print(s1 & s2) # 取两集合的并集 print(s1 | s2) # 取两集合的差集 print(s1 - s2) ``` | python {2} {1, 2, 3, 4, 6} {1, 3} |
2 集合函数
2.1 元素数量
元素数量 | |
---|---|
python s1 = {1, 2, 3, 4, 5} print(len(s1)) |
python 5 |
3 集合方法
3.1 增加元素
增加单个元素 | |
---|---|
python s1 = {1, 2, 3, 5} s1.add(4) print(s1) |
python {1, 2, 3, 4, 5} |
从其他复合数据类型中整合 | |
python s1 = {3, 1, 4, 5} # 整合列表 dic1 = ['a', 'c'] s1.update(dic1) print(s1) # 整合元组 tup1 = 6, s1.update(tup1) print(s1) # 整合字典 dic1 = {'A': 1, 'B': 2} s1.update(dic1) print(s1) # 整合集合 s2 = {7, 6, 3} s1.update(s2) print(s1) # 被整合的数据排序不同 s1 = {3, 1, 4, 5} dic1 = ['a', 'c'] tup1 = 6, 9 s1.update(dic1) s1.update(tup1) print(s1) |
python {1, 3, 4, 5, 'a', 'c'} {1, 3, 4, 5, 6, 'a', 'c'} {1, 3, 4, 5, 6, 'a', 'A', 'B', 'c'} {1, 3, 4, 5, 6, 7, 'a', 'A', 'B', 'c'} # 该代码不循环,手动运行多次 {1, 3, 4, 5, 6, 'a', 9, 'c'} {1, 3, 4, 5, 6, 9, 'a', 'c'} {1, 3, 4, 5, 'c', 6, 9, 'a'} {1, 3, 4, 5, 'c', 6, 9, 'a'} # 可见字母部分在集合中的位置随机 |
3.2 删除元素
删除元素 不存在就报错 remove | |
---|---|
python s1 = {1, 2, 3, 4, 5} # 删除元素 s1.remove(4) print(s1) # 删除不存在元素 s1.remove(6) print(s1) |
python {1, 2, 3, 5} 报错:KeyError: 6 |
删除元素 不存在不报错 discard | |
python s1 = {1, 2, 3, 4, 5} # 删除元素 s1.discard(4) print(s1) # 删除不存在元素 s1.discard(6) print(s1) |
python {1, 2, 3, 5} {1, 2, 3, 5} |
随机删除元素 | |
python s1 = {1, 2, 3, 4, 5} s1.pop() # 不可写下标 # 随机删除 原因 -> print(s1) |
python # 集合无下标,且元素具有随机性 {2, 3, 4, 5} |
清空元素 | |
python s1 = {1, 2, 3, 4, 5} s1.clear() print(s1) |
python # 顺便见识下空集合的写法 set() |
3.3 集合运算
求合集 | ||
---|---|---|
```python s1 = {1, 2, 3, 4, 5} s2 = {1, 3, 5, 7, 9} # 返回两集合所有元素 print(s1.union(s2)) print(s1 | s2) ``` | python {1, 2, 3, 4, 5, 7, 9} {1, 2, 3, 4, 5, 7, 9} |
求差集 | ||
python s1 = {1, 2, 3, 4, 5} s2 = {1, 3, 5, 7, 9} # 返回s1里有,s2里没有的元素 print(s1.difference(s2)) print(s1 - s2) |
python {2, 4} {2, 4} |
|
求交集 | ||
python s1 = {1, 2, 3, 4, 5} s2 = {1, 3, 5, 7, 9} # 返回两集合共有的元素 print(s1.intersection(s2)) print(s1 & s2) # 不返回值,而是更新原集合的方法 s1.intersection_update(s2) print(s1) print(s1.intersection_update(s2)) |
python {1, 3, 5} {1, 3, 5} {1, 3, 5} None |
|
求不重合集 | ||
python s1 = {1, 2, 3, 4, 5} s2 = {1, 3, 5, 7, 9} # 返回两集合都不共有的元素 print(s1.symmetric_difference(s2)) # 不返回值,而是更新原集合的方法 s1.symmetric_difference_update(s2) print(s1) |
python {2, 4, 7, 9} {2, 4, 7, 9} |
3.4 集合判断
判断元素是否存在 | |
---|---|
python s1 = {1, 2, 3} print(2 in s1) |
python True |
判断两集合是否有元素独立 | |
python s1 = {1, 2, 3} s2 = {2, 4, 6} s3 = {1, 3, 5} # 有共同元素 返False print(s1.isdisjoint(s2)) # 没有共同元素 返True print(s2.isdisjoint(s3)) |
python False True |
判断前者是否为后者子集 | |
python s1 = {1, 2, 3} s2 = {2, 4, 6} s3 = {2} # 不是子集 print(s2.issubset(s1)) # 是子集 print(s3.issubset(s1)) |
python False True |