Python中的集合
admin
2023-01-20 06:22:07
0

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)) #  不能使用{}创建空集合,创建的为字典


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()  创建空集合


三、集合的增删查

1、查操作

使用"in" "not in"对列表进行查操作

s1 = {'a','b','c'}
print('a' in s1) # True
print('d' not in s1) # 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) # 删除元素3
print(s1) # {2, 4, 5}
s1.discard(2)  # 删除元素2
print(s1) #  {4, 5}
s1.clear() # 清空集合
print(s1) # set()


四、集合之间的关系

1、两个集合是否相等,可以使用运算符== 和 != 进行判断

s1 = set([1,2,3,4])
s2 = set([2,3,4,5])
print(s1 == s2) # False
print(s1 != s2) # True


2、一个集合是否是另一个集合的子集

# 调用方法issbubset进行判断
s1 = {1,2,3,4}
s2 = {3,4,6}
s3 = {1,2,3,4,5}
print(s1.issubset(s3)) # True
print(s2.issubset(s3)) # False


3、一个集合是否是另一个集合的超集

#  可以调用方法issuperset进行判断
print(s3.issuperset(s1)) # True
print(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)) # True
print(s1.isdisjoint(s3)) # False


五、集合的数学操作

1、两个集合的交集

#s1和s2的交集
#使用intersection方法,返回的是两者的交集
#使用s1.intersection_update(s2)方法,返回值是none,但是会把交集的值赋给s1
s1 = {1,2,3,4}
s2 = {3,4}
print(s1.intersection(s2))  #{3, 4}
print(s1 & s2 ) #{3, 4}
print(s1.intersection_update(s2))  #None
print(s1)  #{3, 4}


2、两个集合的并集

并集并集,合并的集合,使用union
s1 = {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,作用为将差集赋值给s1
s1 = {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)) #None
print(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)) #None
print(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} 
s1.add(('abc'))
print(s1,type(s1)) {1, 2, 3, 4, 'abc', 7, 8, 56} 


相关内容

热门资讯

美防长:对伊朗战争已耗资375... △美国国防部长赫格塞思(资料图)央视记者当地时间21日获悉,美国国防部长赫格塞思表示,美国对伊朗战争...
在全国抗议声中,泽连斯基解除乌... 据乌克兰媒体《基辅独立报》报道,乌克兰总统泽连斯基解除了乌克兰武装部队总司令瑟尔斯基的职务,并任命联...
也门胡塞武装:停靠沙特港口船只... 新华社科威特城7月21日电(记者尹炣)萨那消息:也门胡塞武装20日警告国际航运公司称,与沙特港口开展...
特朗普:胡塞武装若封锁红海,美... 新华社华盛顿7月21日电(记者黄强 徐剑梅)美国总统特朗普21日在白宫会见到访的黎巴嫩总统奥恩时表示...
AI第一城|GOAI世界人工智... 7月21日上午,GOAI世界人工智能开源大赛(Global Open-source AI Chall...
刀闸阀行业解读:申奥阀门的技术... 在工业流体控制领域,高粘度介质、强腐蚀环境以及含固体颗粒的复杂工况,长期是制约管路系统安全运行的关键...
原创 华... 现在的手机屏幕做得是越来越大了,iPhone17 Pro Max也做了6.9英寸大屏,国产自然不能输...
WAIC2026:没有花架子,... 齐鲁晚报·齐鲁壹点 记者 任磊磊 “逛不完,根本逛不完!”在世界人工智能大会展馆现场,不少观众一边逛...
欧洲议会外委会首次派团访华,王... 2026年7月21日,中共中央政治局委员、外交部长王毅在北京会见欧洲议会外事委员会主席麦克阿里斯特率...
大熊猫“福虎”嘴角生疮,官方回... 7月21日,南京紫清湖野生动物世界发布通告,称“福虎”自嘴角边长疮至今,园区一直在中国大熊猫保护研究...