python笔记——集合

集合

  • python的内置数据结构之一,与列表、字典一样都属于可变序列
  • 集合是没有value的字典,相当于计算key的hash值并存储key,其他则和字典一样,比如key不能重复,key必须是不可变对象,key是无序的。
  • 也就是说集合中的元素是不可重复的、是不可变对象、是无序的。
    在这里插入图片描述

集合的创建方式

  • 直接用花括号{ }
s = {'python', 'hello', 90, 90, 80} #{'python', 'hello', 90, 80}
  • 使用内置函数set( )可以将列表、元组、字符串序列、集合序列、rang()创建的整数序列转成集合。转成集合后序列的顺序可能发生改变,同时会去掉重复元素。
#range()
s1 = set(range(6))
print(s1)   #{0,1,2,3,4,5}

#列表
s2 = set([1,2,4,5,5,5,6,6])
print(s2)   #{1,2,4,5,6}

#元组
s3 = set((1,2,4,4,5,65))
print(s3)   #{65,1,2,4,5}

#字符串序列
s4 = set('python')
print(s4)   #{'n','h','p','y','t','o'}

#集合不转也是集合,这个有点唠了
s5 = set({12,4,34,55,66,44,4})
print(s5)   #{34,66,4,55,12,44}
  • 定义一个空集合就不能直接用s = { }来创建了,这样创建出来的实际上是一个字典,应该有s = set()
s = {}   #dict字典类型
s = set()   #空集合

集合元素的判断操作

用in和not in来判断某一元素是否在集合中

集合元素的添加操作

方法作用
add()添加一个元素
update()添加至少一个元素
s = {10,20,30,405,60}
s.add(80)
print(s)   #{10,80,20,405,60,30}

#当然update()中的参数是列表或者元组啥的也可以
s.update({200,400,300})
print(s)   #{200,10,300,80,400,20,405,60,30}

集合元素的删除操作

方法作用
remove()删除一个指定元素,如果指定元素不存在则抛出KeyError
dicard()删除一个指定元素,如果指定元素不存在不抛异常
pop()没有参数且只能删除一个任意元素
clear()清空集合

集合间的关系

关系判断方法
两个集合是否相等可以用==或!=进行判断
s2是否为s1的子集s2.insubset(s1)
s1是否为s2的超集s1.issuperset(s2)
s1和s2是否有交集s1.isdisjoint(s2),注意函数内是disjoint,所以没有交集返回True,有交集返回False

集合的数学操作

在这里插入图片描述

s1 = {10,20,30,40}
s2 = {20,30,40,50,60}

#(1)交集用intersection或&
print(s1.intersection(s2))   #{40,20,30}
print(s1 & s2)   #{40,20,30}

#(2)并集用union或 | 
print(s1.union(s2))   #{40,10,50,20,60,30}
print(s1 | s2)   #{40,10,50,20,60,30}

#(3)差集用difference或 -
print(s1.difference(s2))   #{10}
print(s1 - s2)   #{10}

#(4)对称差集symmetric_difference或^
print(s1.symmetric_difference(s2))   #{10,50,60}
print(s1 ^ s2)   #{10,50,60}

集合生成式

  • 集合生成式就是用于生成集合的公式,公式的一般形式为:
    {表示集合元素的表达式 for 自定义变量 in 可迭代对象}
s = {i*i for i in range(10)}
print(s)   #{0,1,64,4,36,9,16,49,81,25}
  • 实际上,将公式两端的花括号{}改成[]就是列表生成式。
  • 元组是没有生成式的。

列表、字典、元组、集合总结

数据结构是否可变是否重复是否有序定义符号
列表list可变可重复有序[ ]
元组tuple不可变可重复有序( )
字典dict可变key不可重复,value可重复无序{key: value}
集合set可变不可重复无序{ }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

联邦学习小白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值