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你却是可以往里面添加数据或是删除数据的操作。