集合
前言:首先我问大家几个问题,什么是集合?集合的作用是什么?集合是可变的数据类型吗?下面我们就按照这些问题进行展开。
- 什么是集合?
由不同元素组成的集合,集合是一组无序排列 可hash值,可作为字典的key。集合的目的是将不同的值存放在一起,不同的集合间用来做关系运算。
- 集合的作用
我认为集合有两个作用,一个是集合本身的性质 ‘’去重‘’,另一个集合可以用来做关系测试,比如交集,并集,差集,反交集(个人叫法)
- 集合是可变数据类型吗?
set1 = {1, 2, 3}
print(id(set1))
set1.add(4)
print(id(set1))
# 输出:
166444888576
166444888576
a) 由此可见集合是可变数据类型,但是在这里我要强调一下,上面我说了集合是一组无序排列 可hash值,所以说,集合里面的元素必须都是不可变的数据类型,而且集合也是无序的,所以说没有索引的概念
b) 将列表作为集合的元素
set1 = {[1, 2], 3, 4}
print(set1)
# 报错:
TypeError: unhashable type: 'list'
集合的方法
-
集合的创建
a) 直接用花括号括起来
set1 = {1, 2, 3, 3, 2} print(set1) # 输出: {1, 2, 3}
可见集合会自动去除重复的元素
b) 内置方法进行创建
set1 = set((1, 2, 3, 3, 2)) print(set1) # 输出 {1, 2, 3}
c) 创建空集合
set1 = {} # 这样创建是默认创建的空字典而不是空集合 set2 = set() print(type(set1)) print(type(set2)) # 输出: <class 'dict'> <class 'set'>
-
增
a) add() 单独增加
set1 = {1, 2, 3} set1.add(4) print(set1) # 输出: {1, 2, 3, 4}
b) update() 迭代增加,与列表的extend类似
set1 = {1, 2, 3} set1.update([4, 5, 6]) print(set1) # 输入: {1, 2, 3, 4, 5, 6}
-
删
a) remove() 删除指定元素
set1 = {1, 2, '小红'} set1.remove('小红') print(set1) # 输出: {1, 2}
b) pop() 随机删除一个元素
set1 = {'李明', '小兰', '小红'} set1.pop() print(set1) # 输出: 多种结果
-
改,查
因为集合是无序的,所以不提供改和查的功能,但还是有隔山打牛的方式进行更改a) 改 我们先删除要改的元素,然后进行添加元素
set1 = {'李明', '小兰', '小红'} set1.remove('小红') set1.add('李华') print(set1) # 输出: {'小兰', '李华', '李明'}
b) 查 通过 in 或者 not in 判断元素是否在集合内
set1 = {'李明', '小兰', '小红'} print('李明' in set1) print('憨憨' in set1) # 输出: True False
重点
前面说了集合的几个作用:
- 去重
- 做关系测试
-
去重,当我们要对列表进行去重时,我们可以将列表转为集合再转为列表,即可完成去重工作
set1 = [1, 2, '你好', 2, 7, '你好'] set1 = set(set1) print(set1) print(list(set1)) # 输出: {1, 2, '你好', 7} [1, 2, '你好', 7]
-
关系测试
a) 交集 & 两个集合共有的元素
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} # 两种去交集的方式 print(set1 & set2) print(set1.intersection(set2)) # 输出: {3, 4} {3, 4}
b) 并集 |
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set1 | set2) # 输出: {1, 2, 3, 4, 5, 6}
c) 差集
set1 - set2:set1 减去与set2的共有元素,再得到set1的结果
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set1 - set2) # 输出: {1, 2}
set2 - set1:set2 减去与set1 的共有元素,再得到set2的结果
set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set2 - set1) # 输出: {5, 6}
d) 反交集(个人叫法) ^
可以理解为并集减去交集得到的结果set1 = {1, 2, 3, 4} set2 = {3, 4, 5, 6} print(set2 ^ set1) print((set1 | set2) - (set1 & set2)) # 输出: {1, 2, 5, 6} {1, 2, 5, 6}
-
判断子集与超集
a) 判断子集超集
set1 = {1, 2, 3, 4, 5} set2 = {3, 4} print(set1 > set2) # 通过大于小于号判断 print(set2.issubset(set1)) # set2是set1的子集,subset:子集 print(set1.issuperset(set2)) # set1是set2的超集,superset:超集 # 输出: True True True
结语:python中集合的基本介绍就到这里了,希望读者都能够有属于自己的收获,觉得还不错的可以点个赞,你们的鼓励是我最大的动力