Day4 dict和set
一组key的集合,包含key与value的对应。
Python内置的字典,在其他语言中称为map,使用key-value存储,具有极快的查找速度。
dict的查找和插入速度极快,不会随着key的增加而变慢。
dict需要占用大量的内存,内存浪费多。
list的查找和插入时间随着元素的增加而增加。
list占用空间小,浪费内存很少。
dict是一种用内存空间换取运行时间的一种方法
dict可以用在需要高速查找的地方,几乎无处不在。
要保证Hash的正确性,作为key的对象就不能变化。字符串、整数等都是不可变对象,而list是可变的,所以list不能作为key。
成绩对照表
可以使用两个list来完成,如:
names = ['Alias','Billy','David']
scores = [90,60,75]
给定名字后,根据名字在list的位置,再去另一个list中的对应位置取出元素,得到成绩。 list越长,耗时越多。
使用dict来实现,如:
result = { 'Alias':97,'Billy':60,'David',75 }
result[ 'Alias' ]
这种方式,key和value是一一对应的,存放数据时,必须根据key算出value的存放位置,这样在取值时才会根据key直接拿到value. 一个key只能对应一个值,如果一个dict中有两个key相同时(一个key出现两次), 后出现的key的值会覆盖之前出现的相同key的值.
##dict中存放key的顺序与录入顺序无关。
将数据存入dict
1.初始化放入
result = { 'a':20 , 'b':30, 'c':40 }
2.通过key放入
result['abc'] = 12
##如果key不存在,在调用时会报错。
'abcd' in result
2.通过get()来获取key对应的值,如果key不存在, 则返回None
可如果key不存在,返回None, 或者为不存在的情况指定返回的value。
如:
co = { 'Alias':1 , 'Billy':2 , 'Cyndi':3 }
co.get('David')
co.get( 'David' , 4 )
pop()
co.pop('Alias')
如果不指定pop()中的key ,会报错。 这一点与list不同,list会删除掉最后一个元素。
和dict类似,也是一组key的集合,但是不存储value。由于key不能重复,set中没有重复的key。
创建set需要提供一个list作为输入集合。
s = set( [1,2,3,4] )
或
li = [1,2,3,4]
s = set( li )
set内的list中的元素顺序不表示set是有序的。
重复元素会被自动过滤。
add()
s.add('a')
list不能作为元素添加到set,会报错。因为list是可变对象。set与dict都不支持将可变对象作为key。
删除set中的元素
remove()
s.remove(4)
一次只能remove一个元素。
set可以看做是一个数学意义上的集合,因此多个set之间可以做数学意义上的交集并集操作。
>>> s1 = set( [1,2,4,8,10,28] )
>>> s2 = set( [2,4,6,8,10,12] )
>>> s1 & s2
{8, 2, 10, 4} #交集
>>> s1 | s2
{1, 2, 4, 6, 8, 10, 12, 28} #并集
在此先引入一个新函数 replace()
a='abc'
a.replace('a','A')
之前例子里讲,str、int等类型数据都是不可变对象,那么,如果对这些不可变对象进行replace操作,这些对象是不是已经不再“不可变”了呢?
>>> a.replace('a','BBBBBB')
'BBBBBBbc'
实际上, replace之后,再进行print(a) ,会发现 对象(变量)a的值依然是 abc,也就是说,对象a实际上也是一个变量,只不过对象a指向的内容才是str 'abc' , replace之后实际上是新建了一个新的变量,可以通过下面的逻辑来解释这个现象:
>>> print(a)
abc
>>> b = a.replace('a','HHHHH')
>>> print(b)
HHHHHbc
>>> print(a)
abc
所以,对于不可变对象来说,调用对象的任意方法都不会改变对该对象自身的内容,仅仅会创建新的对象并返回,这样就保证了不可变对象本身是永远不可变的。
Day4 dict和set的更多相关文章
- day4:Python列表(list)元组( tuple)字典(dict)
列表----list 列表:中括号,每个元素用‘,’分割,列表里面也可以嵌套列表,列表里面可以包含数字,字符串,布尔值等,也就是元素的集合 例:test = [2,4,'sun','yao'] #索引 ...
- day4(dict和set)
dict 内置字典,使用key-value存储,具有极快的查找速度. >>>d = {'michael': 95, 'bob': 75, 'tracy': 85} >>& ...
- Python之路,Day4 - Python基础4 (new版)
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- Day4 - Python基础4 迭代器、装饰器、软件开发规范
Python之路,Day4 - Python基础4 (new版) 本节内容 迭代器&生成器 装饰器 Json & pickle 数据序列化 软件目录结构规范 作业:ATM项目开发 ...
- 跟着ALEX 学python day4集合 装饰器 生成器 迭代器 json序列化
文档内容学习于 http://www.cnblogs.com/xiaozhiqi/ 装饰器 : 定义: 装饰器 本质是函数,功能是装饰其他函数,就是为其他函数添加附加功能. 原则: 1.不能修改被装 ...
- python day4 元组/字典/集合类知识点补充
目录 python day4 元组/字典/集合类知识点补充 1. 元组tuple知识点补充 2. 字典dict的知识点补充 3. 基本数据类型set 4. 三元运算,又叫三目运算 5. 深复制浅复制 ...
- tuple放入dict中
tuple放入dict中是否可以正常运行 # 将tuple放入dict中 a = ('AI','Kobe','Yao') b = ('AI',['Kobe','Yao']) dict1 = {'a': ...
- redis数据结构存储Dict设计细节(redis的设计与实现笔记)
说到redis的Dict(字典),虽说算法上跟市面上一般的Dict实现没有什么区别,但是redis的Dict有2个特殊的地方那就是它的rehash(重新散列)和它的字典节点单向链表. 以下是dict用 ...
- python list dict 去重的两种方式
def dedupe(items, key=None): seen = set() for item in items: val = item if key is None else key(item ...
随机推荐
- 06、MyBatis 逆向工程
1.MyBatis逆向简介 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.x ...
- [web安全原理]PHP命令执行漏洞基础
前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...
- 如何用ABBYY解决文档图像存在缺陷,OCR 准确性低的问题
扭曲的文本行.歪斜.噪声及扫描图像和数码照片中常见的其他缺陷可能会降低识别质量.ABBYY FineReader,提供各种 自动和手动工具去除这些缺陷. 如何手动编辑图像 如果您禁用了自动预处理功能或 ...
- Mac升级资料丢失怎么办?EasyRecovery能恢复嘛?
随着越来越多的用户选择性能更高的mac笔记本来工作,一般情况下,为了保证用户有一个很好的使用体验,Mac系统会在一定的时间内进行系统的更新,弥补前一个版本的不足.结果就有一些用户反应Mac升级后,电脑 ...
- 对于order by子句
order by子句指定排序顺序 select username from user order by username; 依据username的字母顺序对于查找出来的username进行排序,默认是 ...
- 网络拓扑实例之交换机基于接口地址池作为DHCP服务器(六)
组网图形 DHCP服务器简介 通常用户希望网络中的每台终端能够动态获取IP地址.DNS服务器的IP地址.路由信息.网关信息等网络参数,不需要手动配置终端的IP地址等网络参数:另外,针对一些移动终端(手 ...
- C语言讲义——变量的输入
scanf("%_", &变量); 注意两点: 1.scanf的第一个参数:中只写占位符(%_),不要写别的内容(不是输出给谁看). 2.scanf的第二个参数:要加&am ...
- Ubuntu\Linux 下编写及调试C\C++
一.在Ubuntu\Linux 下编写及调试C\C++需要配置基本的环境,即配置gcc编译器.安装vim编译器,具体配置安装步骤我在这里就不多说了. 二.基本环境配置完了我们就可以进入自己的程序编写了 ...
- 生成微博授权URL及回调地址
1.创建apps/oauth模块进行oauth认证 '''2.1 在apps文件夹下新建应用: oauth''' cd syl/apps python ../manage.py startapp oa ...
- ES6简单理解基本使用
let const 原来的var声明标识符:可以重复声明,编译不报错. let,const声明标识符:不能重复声明,再声明编译报错. var声明的标识符作用域是当前函数,let和const是当前{块} ...