python 集合

集合(set)是一个 无序 、可变、不允许数据重复的容器。

1.定义

s = {11,22,33}

无序,无法通过索引取值

可变,可以添加和删除元素

不允许数据重复

用途:如果有一个数据类型不允许重复,那么此时应该用集合

注意: 定义空集合v = set() 而非 v = {}, v={}默认未定义字典

v1 = []  等同 v1 = list()

v2 = ()  等同v2 = tuple()

v3 = set()

v4 = {}  等同v4 = dict()

 

2.独有功能

s = {11,22,33}

2.1 添加元素 add()

s.add('sss')  #  {11,22,33, 'sss'}

2.2 删除元素 discard()

s.discard(33)  #  {11,22,'sss'}

2.3 交集 intersection()  或者 &

s1 = {11,22,33}

s2 = {33,44,55}

s1.intersection(s2)  #  {33}

s1 & s2  # {33}

2.4 并集  union()  或者 |

s1 = {11,22,33}

s2 = {33,44,55}

s1.union(s2)  #  {11,22,33,44,55}

s1 | s2  # {11,22,33,44,55}

2.5 差集  difference()  或者 -

s1 = {11,22,33}

s2 = {33,44,55}

s1.difference(s2)  #  {11,22}

s2 - s1  # {44,55}

2.公共功能

2.1 减 计算差集(-)

2.2 计算交集(&)

2.3 计算并集(|)

2.4 计算长度(len(s))

2.5 for循环 for char in s

3.转换

其他类型如果想要转换为集合类型,可以通过set进行转换,并且如果数据有重复自动剔除。

提示:int/list/tuple/dict都可以转换为集合。

提示:这其实也是去重的一个手段。

4.存储原理

4.1集合的存储原理

s1 = set()

s1.add('流年')

第一步:利用哈希函数将字符串'流年'转化为一个数值,例如24

第二步:取余数(实际掩码&运算)   24%7 = 3

第三步:将字符串'流年'放在哈希表3的索引位置

4.2集合的元素必须可哈希

因存储原理,集合的元素必须是可哈希的值,即:内部通过通过哈希函数把值转换成一个数字。

目前可哈希的数据类型(元素指定的是集合的每个子元素):int、bool、str、tuple,而list、set、dict是不可哈希的。

总结:集合的元素只能是 int、bool、str、tuple 。

集合转化:

v1 = [11,22,33]

v2 = set(v1)  # {11,22,33}  # 转化成功

v3 = [11,[2,3],44]

v4 = set(v3)  # 报错

注意:由于集合的可哈希存储,所以集合遍历的查找效率特别高(比起for遍历list,tuple,dict)

4.3对比和嵌

类型是否可变是否有序元素要求是否可哈希转换定义空
list list(其他) v=[]或v=list()
tuple tuple(其他) v=()或v=tuple()
set 可哈希 set(其他) v=set()

 

 

 

 

注意:由于True和False本质上存储的是 1 和 0 ,而集合又不允许重复,所以在整数 0、1和False、True出现在集合中会有如下现象:

v1 = {True, 1}
print(v1) # {True}

v2 = {1, True}
print(v2) # {1}

v3 = {0, False}
print(v3) # {0}

v4 = {False, 0}
print(v4) # {False}

posted @   夜落繁华时  阅读(89)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示