python基础数据类型之集合
一、什么是集合
集合(set)是Python基本数据类型之一,它具有天生的去重能力,即集合中的元素不能重复。集合也是无序的,且集合中的元素必须是不可变类型
二、如何创建一个集合
用花括号{}
将一堆没有映射关系的数据包裹起来,数据之间用逗号隔开就构成了集合, 这里要和字典区别开,字典的元素有映射关系
>>> set1 = {1,2,3,4} >>> set1 {1, 2, 3, 4} >>> type(set1) <class 'set'> >>>
用set()函数将一个可迭代序列转换成集合
>>> set2 = set([1,1,3,3,4,4,4]) >>> set2 {1, 3, 4} # 集合会自动去除重复元素 >>> type(set2) <class 'set'> >>> set3 = set('Keys') >>> set3 {'K', 'y', 'e', 's'} #从这里可以看出集合是无序的 >>>
三、访问集合
由于集合是无序的,所以不能用索引来访问,如果要访问集合里的元素,可以有下面的方法
利用for
循环遍历集合
>>> for i in set1: ... print(i) ... 1 2 3 4 >>>
利用in
和not in
判断一个元素是否在集合中
>>> 1 in set1 True >>> 5 in set1 False >>>
四、不可变集合
Python中有一个 frozenset()
函数,可以将集合"冻起来",即将集合变成不可变集合
>>> set1 = frozenset(set1) >>> set1.add(5) Traceback (most recent call last): File "<stdin>", line 1, in <module> AttributeError: 'frozenset' object has no attribute 'add' >>>
五、集合的方法
add()
向集合添加一个元素
>>> set1 = {1,2,3} >>> set1 {1, 2, 3} >>> set1.add(4) >>> set1 {1, 2, 3, 4} >>>
clear()
清空集合里的元素
>>> set1 = {1,2,3,4} >>> set1 {1, 2, 3, 4} >>> set1.clear() >>> set1 set() >>>
copy()
浅copy一个集合
>>> set1 = {1,2,3} >>> set2 = set1.copy() >>> set1 {1, 2, 3} >>> set2 {1, 2, 3} >>>
difference()
差集
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.difference(set2) {1} >>> set2.difference(set1) {4} >>>
difference_update()
差集更新:即将两个集合的差集赋给第一个集合
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.difference_update(set2) >>> set1 {1} >>>
discard()
删除集合中的元素,如果元素不存在,则什么也不做,如果元素存在,就删除它
>>> set1 = {1,2,3} >>> set1.discard(1) >>> set1 {2, 3} >>> set1.discard(4) >>> set1 {2, 3} >>>
intersection()
取交集:即两个集合都有的元素
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.intersection(set2) {2, 3} >>> set2.intersection(set1) {2, 3} >>>
intersection_update()
交集更新:即将两个集合的交集赋给第一个集合
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.intersection_update(set2) >>> set1 {2, 3} >>>
isdisjoint()
判断两个集合是否有空交集,如果两个集合有一个空交集,返回 True,否则返回False
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set3 = {5,6} >>> set1.isdisjoint(set2) False >>> set1.isdisjoint(set3) True >>>
issubset()
判断set1是不是set2的子集
>>> set1 = {1,2,3} >>> set2 = {1,2,3,4} >>> set3 = {2,3,4} >>> set1.issubset(set2) True >>> set1.issubset(set3) False >>>
issuperset()
判断set1是不是set2的父集
>>> set1 = {1,2,3} >>> set2 = {1,2,3,4} >>> set3 = {2,3,4} >>> set2.issuperset(set1) True >>> set2.issuperset(set2) # 一个集合即是其本身的父集,也是其本身的子集 True >>>
pop()
随机弹出集合里的某个元素
>>> set1 = {1,2,3} >>> set1.pop() 1 >>> set1.pop() 2 >>> set1 {3} >>>
remove(x)
移除集合元素x
>>> set1 = {1,2,3} >>> set1.remove(2) >>> set1 {1, 3} >>>
symmetric_difference()
对称差集:返回两个集合中相互都没有的元素组成的集合
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.symmetric_difference(set2) {1, 4}
symmetric_difference_update()
对称差集更新:即将两个集合的对称差集的结果赋给第一个集合
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set1.symmetric_difference_update(set2) >>> set1 {1, 4}
union()
取并集:返回两个集合中所有元素
>>> set1 = {1,2,3} >>> set2 = {2,3,4} >>> set2.difference(set1) {4} >>> set1.union(set2) {1, 2, 3, 4} >>> set2.union(set1) {1, 2, 3, 4} >>>
update()
更新集合
>>> set1 = {1,2,3} >>> set1.update([4,5]) >>> set1 {1, 2, 3, 4, 5} >>>
六、集合内容补充
除了用集合的方法来操作集合,还可以用操作符,其对应关系如下:
操作符 | 含义 | 使用方法 | 等价于 |
< | 子集 | set1<set2 | issubset() |
| | 并集 | set1|set2 | union() |
& | 交集 | set1&set2 | intersection() |
- | 差集 | set1-set2 | difference() |
^ | 对称差集 | set1^set2 | symmetric_difference() |