Python中的集合
Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。今天介绍的是Python中的集合。
一、什么是集合
除了列表,元组和字典,集合也是Python语言提供的内置数据结构之一,可以把集合看作是没有存储value的字典,因此集合的特点如下:
1. 集合中不可以存储重复的数据;
2. 集合中的数据是无序的;
3. 集合中的数据可以是任何不可变类型,多种类型的数据可以混合存储在一个集合中;
4. 集合可以根据需要动态的伸缩,也就是说,系统会根据需要动态的分配和回收内存,因此在使用前无须预先声明集合的容量;
5. 集合会浪费较大的内存,与列表相比是用空间换取了时间;
二、集合的创建
1、使用花括号{}创建集合
s={3,5,8,1,2}print(s)#{1,2,3,5,8}s={3,3,6,8,8,9}print(s)#{8,9,3,6}s={}print(type(s))#<class'dict'>不能使用{}创建空集合,创建的为字典
2、使用内置函数set创建集合
s=set(range(1,6))#{1,2,3,4,5}s=set([3,5,8,1,2])#{1,2,3,5,8},可以传入列表s=set((3,5,8,1,2))#{1,2,3,5,8},可以传入元组s=set({3,5,8,1,2})#{1,2,3,5,8},可以传入{}集合s=set('35812')#{'5','8','3','2','1'},传入的字符串会被分隔开s=set()#set()<class'set'>创建空集合
三、集合的增删查
1、查操作
使用"in" "not in"对列表进行查操作
s1={'a','b','c'}print('a'ins1)#Trueprint('d'notins1)#True
2、增操作
使用add和update方法添加元素
s1={'a','b','c'}s1.add('d')#一次添加一个元素s1.update('e','f','g')#一次添加多个元素print(s1)#{'g','f','d','b','c','a','e'}
3、删操作
使用pop,remove,discard,clear对集合做删操作
s1={1,2,3,4,5}print(s1.pop())#1一次随机删除一个元素s1.remove(3)#删除元素3print(s1)#{2,4,5}s1.discard(2)#删除元素2print(s1)#{4,5}s1.clear()#清空集合print(s1)#set()
四、集合之间的关系
1、两个集合是否相等,可以使用运算符== 和 != 进行判断
s1=set([1,2,3,4])s2=set([2,3,4,5])print(s1==s2)#Falseprint(s1!=s2)#True
2、一个集合是否是另一个集合的子集
#调用方法issbubset进行判断s1={1,2,3,4}s2={3,4,6}s3={1,2,3,4,5}print(s1.issubset(s3))#Trueprint(s2.issubset(s3))#False
3、一个集合是否是另一个集合的超集
#可以调用方法issuperset进行判断print(s3.issuperset(s1))#Trueprint(s3.issuperset(s2))#False
4、两个集合是否没有交集
#可以调用方法isdisjiont进行判断s1={1,3,5,7}s2={22,11,44}s3={1,2,3,5,7,8}print(s1.isdisjoint(s2))#Trueprint(s1.isdisjoint(s3))#False
五、集合的数学操作
1、两个集合的交集
#s1和s2的交集#使用intersection方法,返回的是两者的交集#使用s1.intersection_update(s2)方法,返回值是none,但是会把交集的值赋给s1s1={1,2,3,4}s2={3,4}print(s1.intersection(s2))#{3,4}print(s1&s2)#{3,4}print(s1.intersection_update(s2))#Noneprint(s1)#{3,4}
2、两个集合的并集
并集并集,合并的集合,使用unions1={1,2,3,4,5}s2={3,4,5}print(s1.union(s2))#{1,2,3,4,5}print(s1|s2)#{1,2,3,4,5}
3、两个集合的差集
#既找到s1在s2中没有的元素#使用difference()方法,找到差集#使用s1.difference_update(s2)方法,返回的值为None,作用为将差集赋值给s1s1={1,2,3,4,5,6}s2={1,7,9,4,10}print(s1-s2)#{2,3,5,6}print(s1.difference(s2))#{2,3,5,6}print(s1.difference_update(s2))#Noneprint(s1)#{2,3,5,6}
4、两个集合的对称差集
对称差集,既去掉两个集合交集的部分s1={1,3,5,7,9}s2={2,3,6,7,10}print(s1^s2)#{1,2,5,6,9,10}print(s1.symmetric_difference(s2))#{1,2,5,6,9,10}print(s1.symmetric_difference_update(s2))#Noneprint(s1)#{1,2,5,6,9,10}
六、frozenset不可变的集合
frozenset,被冻结的set,也是不可变的set,frozenset置于set就好比tuple置于list
frozenset是不可变类型,存在以下特点:
● 存在哈希值
● 可以作为字典的key
● 可以作为set的元素
#可以调用内置函数frozenset创建print(frozenset(range(6)))#frozenset({0,1,2,3,4,5})print(frozenset([1,2,5,7]))#frozenset({1,2,5,7})print(frozenset(('a','b','c')))#frozenset({'a','c','b'})print(frozenset('abcdef'))#frozenset({'c','f','e','a','b','d'})#作为set的元素s1=set(frozenset([1,2,3,4,56,7,8]))print(s1,type(s1))#{1,2,3,4,7,8,56}<class'set'>s1.add(('abc'))print(s1,type(s1)){1,2,3,4,'abc',7,8,56}<class'set'>
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。