Python初学——集合(四种数据结构的小总结)

什么是集合

在这里插入图片描述
与字典一样,没有索引值,都要通过hash( )函数来进行定位

集合的创建方式

直接{ }

要注意,和字典类似,key值不能重复,否则只保留一个,即集合中的元素不允许重复:

s = {1,2,3,4,4,5,6,7,7}
print(s)

在这里插入图片描述

使用内置函数set( )进行创建

s1 = set(range(6))
print(s1,type(s1))
s2 = set([1,2,3,3,4,4,5])  # 可以将列表转换为集合类型,同时去掉重复的元素
print(s2,type(s2))
s3 = set((1,2,3,3,4,65))  # 可以将元组转换为集合类型,同时也证
							明了集合元素的无序性,且不允许元素重复
print(s3,type(s3))
s4 = set('python')  # 可以将字符串转换为集合类型,同时要注意集合的无序性再次得到证明
print(s4,type(s4))
s5 = {}
print(type(s5))  # 此方法不能定义空集合,只是空字典
# 定义空字典:
s6 = set()
print(type(s6))

在这里插入图片描述

集合的相关操作

在这里插入图片描述

集合元素的判断操作

s1 = {10,20,30,405,60}
print(s1)
print(10 in s1)
print(100 in s1)
print(10 not in s1)
print(100 not in s1)

在这里插入图片描述

集合元素的添加操作

add()

s1 = {10,20,30,405,60}
print(s1)
s1.add(80)  # 一次添加一个元素 
print(s1)

在这里插入图片描述

update( )

s1 = {10,20,30,405,60}
print(s1)
s2 = {200,300,400}
s1.update(s2)  # 一次至少添加一个元素
print(s1)
s1.update([156,487,562])  # 可以直接添加列表
s1.update((111,222,333))  # 可以直接添加元组
print(s1)

在这里插入图片描述

集合元素的删除操作

remove()

一次删除一个指定元素,若指定元素不存在则会抛出异常

元素存在:

s1 = {10,20,30,405,60}
print(s1)
s1.remove(10)
print(s1)

在这里插入图片描述
元素不存在:

s1 = {10,20,30,405,60}
print(s1)
s1.remove(500)
print(s1)

在这里插入图片描述

discard()

一次删除一个指定元素,若元素不存在则不抛出异常
元素存在:

s1 = {10,20,30,405,60}
print(s1)
s1.discard(10)
print(s1)

在这里插入图片描述
元素不存在:

s1 = {10,20,30,405,60}
print(s1)
s1.discard(500)
print(s1)

在这里插入图片描述

pop()

一次删除一个任意元素,删除谁不确定

s1 = {10,20,30,405,60}
print(s1)
s1.pop()
print(s1)
s1.pop()
print(s1)

在这里插入图片描述
但要注意pop()不能指定元素(要注意列表中的pop()删除操作可以指定索引位置),如:

s1 = {10,20,30,405,60}
print(s1)
s1.pop(20)
print(s1)

在这里插入图片描述

clear()

清空集合

s1 = {10,20,30,405,60}
print(s1)
s1.clear()
print(s1)

在这里插入图片描述

集合之间的关系

两个集合之间是否相等

s1 = {10,20,30,40}
s2 = {40,30,20,10}
print(s1 == s2)  # 再次证明集合当中的元素是无序的,不会因为输入的先后而产生差异
print(s1 != s2)

在这里插入图片描述

判断一个集合是否是另一集合的子集 issubset()

s1 = {10,20,30,40,50,60,70}
s2 = {40,30,20,10}
s3 = {10,20,90}
print(s2.issubset(s1))
print(s3.issubset(s1))

在这里插入图片描述

判断一个集合是不是另一个集合的超集 issuperset()

s1 = {10,20,30,40,50,60,70}
s2 = {40,30,20,10}
s3 = {10,20,90}
print(s1.issuperset(s2))
print(s1.issuperset(s3))

两个集合是否没有交集 isdisjoint()

s1 = {10,20,30,40,50,60,70}
s2 = {40,30,20,10}
s3 = {10,20,90}
s4 = {1000}
print(s1.isdisjoint(s2))
print(s1.isdisjoint(s4))

在这里插入图片描述

集合的数学操作

在这里插入图片描述

交集操作intersection( )

s1 = {10, 20, 30, 40, 50, 60, 70}
s2 = {40, 30, 20, 10, 100}
print(s1.intersection(s2))

在这里插入图片描述

并集操作( )

s1 = {10, 20, 30, 40, 50, 60, 70}
s2 = {40, 30, 20, 10, 100}
print(s1.union(s2))

在这里插入图片描述

差集操作difference( )

s1 = {10, 20, 30, 40, 50, 60, 70}
s2 = {40, 30, 20, 10, 100}
print(s1.difference(s2))

在这里插入图片描述

对称差集symmetric_difference( )

s1 = {10, 20, 30, 40, 50, 60, 70}
s2 = {40, 30, 20, 10, 100}
print(s1.symmetric_difference(s2))

在这里插入图片描述

集合生成式

类似于列表生成式,只不过将方括号改为了花括号,且要注意,集合里的元素是没有固定顺序的,是通过hash函数确定的存储位置
对比两者的列表生成式:

lst = [i*i for i in range(6)]
print(lst)
s = {i*i for i in range(10)}
print(s)

在这里插入图片描述

四种数据结构的总结

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值