python 语法(4)

目录

  • dict
  • set

dict

dictionary的缩写,字典的意思,使用键值对的方式进行存储。

比如,如果你想根据每个学生的名字查找对应的成绩,你需要建立两个list

 而dict则不需要,直接如下建立,查询结果为99

如果有多个key,则后面的key会覆盖前面的key,这里我的输出为98

 重点:为什么dict为什么速度快

我们知道dict比list查询速度不知道快多少倍。为什么这么快呢,因为dict的实现原理和查字典是一样的,假设字典包括了1万个字,我们要查一个字,一个办法是把字典从前往后翻,知道找到我们想要的字为止,这种方法就是在list中查找元素的方法,list越大,查找越慢

第二种方法是现在字典的索引表里(比如部首表)查这个字对应的页码,然后直接翻到该页,找到该字。无论哪个字,这种查找速度都非常快,不会随着字典的大小的增加而变慢

dict就是第二种实现方式,给点一个名字,比如‘张三’,在dict内部就可以直接计算出张三对应的存放成绩的‘页码’,也就是99这个数字存放的内存地址,直接取出来,所以速度非常快

你可以猜到,这种key-value存储方式,在放进去的时候,必须根据key算出value的存放位置,这样,取的时候才能根据key直接拿到value

key是否存在

为了防止我们在使用时报错,我们可以先看一下这个key是否存在。这里返回为true

同样的原理,也是检查作用,通过get()函数实现,2:返回为None,不存在,3:返回-1,因为不存在指定了返回值

 

 删除key

我们要删除一个key,要用到pop(key)方法,对应的value也会从dict中删除,这里就不会显示99了,只会显示98和77

dict和list的区别

1、查找和插入的速度极快,不会随着key的增加而变慢

2、需要占用大量的内存,内存浪费多

list

1、查找和插入的时间随着元素的增加而增加

2、占用空间少,浪费内存少

所以可以看出来dict就是空间换时间。一般使用时要注意用在不可变的数据上,因为查找dict数据是按照key值查找。

 

set

创建set

set和dict类似也是存储的集合,用来存储key,但是不存储value,而且key在set中不能重复

首先我们创建一个set,这里语法就是需要一个list存储数据。上面和下面的数据结果都为:{1,2,3}。因为set会自动过滤掉重复的数据

 添加set数据:add()

 

 可以重复添加,但是没效果

删除set数据:remove(key)

 

交集和并集

因为set为两个集合,所以可以做这些操作

因为set和dict是一样的查询方式,所以它的数据同样是不可变的对

扩展

s = set([1,2,3])和s = set([1,[2,3])

左边是正确的,右边是错误的,为什么呢

s = set([1,2,3]):我们学过set只能存储不可变对象,这里虽然[]属于list可变的特性,但是里面的数据1,2,3是不变的可以用来做key。

s = set(1,[2,3]):这里set里面看似只有1,[2,3]两个数据,而且都是不变的,但是[2,3]确实可变的。比起上面的单个2,3比,它里面的数据却是可以改变的。

这里比较绕,首要要分清楚什么是可变对象,什么时候不可变对象。我的理解是,上面的数据单位已经是最小化了,2就是2,这个2是个值,不是对象,你不能对其进行修改,但是[2,3]这样这一list你却是可以往里面添加数据或是删除数据的操作。

 

转载于:https://www.cnblogs.com/cheneyboon/p/11536421.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值