一、集合(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'}) #参数是setprint(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' 在集合元素中,返回TrueFalse #'HangZhou'不在集合元素中,返回False
六、清空集合
set.clear()
set1 = set(['BeiJin','ShangHai','GuangZhou','WuHan','ChangSha'])set1.clear()print(type(set1))print(set1)
运行结果:
#清空后的类型set() #空集合
结束语:
##### 这一篇只是简单的介绍了集合的基础知识,没有深入的往下讲。集合set中还有其他的一些方法,大家自行了解一下。在实际使用或进阶学习过程中再深入去了解,在初学阶段,还是把基础的知识弄懂比好。