一、集合(set)创建
Python中的集合(set)是用来保存不重复的元素,它是一个无序的序列。集合中的元素都是唯一的,互不相同。
1.1 Python集合创建
我们可以用大括号{ } 或者set() 创建集合,但必须注意,创建一个空集合只能用set()而不能用{},因为在前面我们创建一个空字典是就是用的{}。集合中的相邻元素之间用逗号(,)分隔。
set1 = set() #创建一个空的字典
set2 = {} #用{}创建一个空的序列,用于检测是否是集合还是字典
print('set1类型:',type(set1) )
print('set2类型:',type(set2))
运行结果:
set1类型:
set2类型:
集合中的元素是没有个数限制的。
集合中的元素只能是不可变的数据类型,包括整形、浮点型、字符串,元组,不能是列表,字典及集合类型。
set语法
class set([iterable])
set1 = set({{'Tom':18,'Lim':20}}) #集合中的元素是字典
运行结果:
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T14.py", line 1, in
set1 = set({{'Tom':18,'Lim':20}})
TypeError: unhashable type: 'dict'
set1 = set({['a','b','c'],[1,2,3]}) #集合中的元素是列表
运行结果:
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T14.py", line 1, in
set1 = set({['a','b','c'],[1,2,3]})
TypeError: unhashable type: 'list'
正确的Python集合创建方法:
set1 = set([1,2,3,4])
set2 = set((1,2,3,4))
set3 = set('老树Python')
print('set1类型:',type(set1))
print(set1)
print('set2类型:',type(set2))
print(set2)
print('set3类型:', type(set3))
print(set3)
运行结果:
set1类型:
{1, 2, 3, 4}
set2类型:
{1, 2, 3, 4}
set3类型:
{'t', 'o', 'P', '老', '树', 'y', 'n', 'h'}
集合中的元素是唯一的,所以当我们创建集合是,里面有重复的元素,只会保留一份。所以集合具有去重功能。
set1 = {3,2,1,2,('a','b','c'),'b','b'}
print('set1类型:',type(set1))
print(set1)
运行结果:
set1类型: #类型为集合(set)
{1, 2, 3, 'b', ('a', 'b', 'c')} #把相同的元素2和'b'已经去掉相同的,仅保留一份
需要注意:Python中的集合set是无序的,所以每次输出时元素的排列顺序可能都不相同
Python中有两种集合类型,一种是set类型的集合,另一种是frozenset类型的集合,它们唯一的区别是,set类型集合可以做添加、删除元素的操作,frozenset集合不行。本篇只介绍set类型集合。
二、Python集合添加元素
set.add(x)
将元素x添加到集合set中,如果元素已存在,则不进行任何操作
set1 = set(['BeiJin','ShangHai','GuangZhou'])
print(set1)
set1.add('ShenZhen')
print(set1)
set1.add(('WuHan','ChangSha')) #添加元组,不可变,作为一个元素添加到set中
print(set1)
set1.add(['WuHan', 'ChangSha']) #添加列表,出错
print(set1)
运行截屏:
添加的元素x只能为一个且不可变类型如:字符串,元组,整型,浮点型的。
set1 = set(['BeiJin','ShangHai','GuangZhou'])
print(set1)
set1.add('ShenZhen','ChongQin') # 添加了两上字符串,会报错
运行结果:
{'GuangZhou', 'BeiJin', 'ShangHai'}
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T14.py", line 3, in
set1.add('ShenZhen','ChongQin')
TypeError: add() takes exactly one argument (2 given)
另一个方法:update,可以添加元素,且参数可以是列表,元组,列表,字典等
set.update(x)
set1 = set(['BeiJin','ShangHai','GuangZhou'])
print(set1)
set1.update({'ShenZhen', 'ChongQin'}) #参数是set
print(set1)
set1.update(('WH', 'CS')) #参数是元组
print(set1)
set1.update(['CA','FZ']) #参数是列表
print(set1)
运行结果:
{'BeiJin', 'GuangZhou', 'ShangHai'}
{'ShenZhen', 'BeiJin', 'ShangHai', 'ChongQin', 'GuangZhou'}
{'ShenZhen', 'BeiJin', 'WH', 'ShangHai', 'ChongQin', 'CS', 'GuangZhou'}
{'BeiJin', 'WH', 'ShenZhen', 'FZ', 'CA', 'ShangHai', 'CS', 'ChongQin', 'GuangZhou'}
由上可看出,使用.update方法添加的元素是集合,元组,列表时,update方法直接把集合,元组或列表中元素分别提取出来添加到原有集合中。
三、Python集合移除元素
set.remove(x)
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])
print(set1)
set1.remove('WuHan') #移除元素'WuHan'
print(set1)
set1.remove('ChenDu') #移除一个集合中不存在的元素,会报错
运行结果:
{'ShangHai', 'BeiJin', 'GuangZhou', 'ChangSha', 'WuHan'}
{'ShangHai', 'BeiJin', 'GuangZhou', 'ChangSha'}
Traceback (most recent call last):
File "g:/老树Python/python38_3VScode/democode/T14.py", line 5, in
set1.remove('ChenDu') #移除一个集合中不存在的元素
KeyError: 'ChenDu'
由上可以看到使用set.remove(x)方法,如果移除一个不存在的元素,会报错。
此时我们可以使用另一种方法来操作
set.discard(x)
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])
print(set1)
set1.discard('WuHan') #移除元素'WuHan'
print(set1)
set1.discard('ChenDu') #移除一个集合中不存在的元素
print(set1)
运行结果:
{'ShangHai', 'GuangZhou', 'WuHan', 'BeiJin', 'ChangSha'}
{'ShangHai', 'GuangZhou', 'BeiJin', 'ChangSha'}
{'ShangHai', 'GuangZhou', 'BeiJin', 'ChangSha'}
四、计算集合元素个数
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])
print(len(set1)) #用len()方法求集合元素个数
五、判断元素是否在集合中存在
x in set
判断元素x是否在集合s中,存在返回True,不存大返回False
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])
print('BeiJin' in set1)
print('HangZhou' in set1)
运行结果:
True #'BeiJin' 在集合元素中,返回True
False #'HangZhou'不在集合元素中,返回False
六、清空集合
set.clear()
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])
set1.clear()
print(type(set1))
print(set1)
运行结果:
#清空后的类型
set() #空集合
结束语:
这一篇只是简单的介绍了集合的基础知识,没有深入的往下讲。集合set中还有其他的一些方法,大家自行了解一下。在实际使用或进阶学习过程中再深入去了解,在初学阶段,还是把基础的知识弄懂比好。
原创不易,喜欢就给个赞,点个关注吧!
更多的内容可以关注公众号:老树Python
推荐阅读:老树Python:一步一步学Python3(小学生也适用) 第十三篇: 字典Dict类型zhuanlan.zhihu.com老树Python:一步一步学Python3(小学生也适用) 第十二篇: 元组tuple类型zhuanlan.zhihu.com
一步一步学Python3(小学生也适用) 第十一篇: 列表List类型mp.weixin.qq.com
老树Python:一步一步学Python3(小学生也适用) 第十篇: 字符串(str)类型(下)zhuanlan.zhihu.com
老树Python:一步一步学Python3(小学生也适用) 第九篇: 字符串(str)类型(中)zhuanlan.zhihu.com