一、字典
字典存储以“键–值”对形式存储。
哈希表(散列表):能够根据键值对key–value直接进行访问。
key–value映射到表中一个位置
如果出现映射地址冲突的情况 : 链接法 开放寻址法(python)
原理:
(1)为什么字典会加快检索效率
将key采用hash函数,映射成hashcode,hashcode对应value的地址
(2)为什么字典的key是不可变类型
不可变类型才是可哈希的对象。对应一个对象只能产生一个hashcode(字符串、数值、字节)
字典的特点:
(1)字典中的键值对是无序的
(2)字典中的key不能重复
(3)字典中的key必须是不可变类型
1. 字典的定义
空字典 { }
2. 字典key和value的访问和修改
访问字典不能使用索引,因为无序
访问字典:字典{key} 返回value值
修改字典:字典[key]=赋值 方式
如果key已经存在,则修改value,如果不存在,则新创建键值对。
定义字典的时候如果出现重复的key,会使用最后一个赋值将之前的key–value覆盖。
字典和列表相比,牺牲空间来提高时间的一种方式。
3. 字典的运算
字典不支持 + * < >
字典支持is == in
4. 字典的相关方法
(1)追加相关
fromkeys(seq):创建同值不同键的字典
新建修改
setdefault():给字典进行追加键值对
原地修改
key键 value指定的值
如果没有value,会追加key键 None值得键值对
如果key已经存在,则不改变value
如果key不存在,则按照key,value进行追加
update: 字典追加key和value,一次性追加多个键值对。
原地修改
update对已有key进行更新,对不存在的key进行追加
(2)删除相关
pop(key):删除指定的键值对,返回被删除键值对的值
popitem():随机删除一个键值对,返回被删除的键值对的值。()里面不写参数
clear()请空字典
(3)获取相关
get(key) 获取key对应的value key如果不存在,不会报错,还可以指定出错信息
(4)copy
5. 字典的遍历
(1)keys
(2)values()
(3)items()
6. 字典推导式
{ 输出表达式 for k,v in 字典 }
把k的值变大2倍
看k,v交换位置可以交换key与value。
二、集合
集合的顶层是字典实现的,看成是value值为None的字典。
集合没有索引和切片。集合无法通过索引获得元素。想要获得元素,基本上只能遍历。
集合的特点:
(1)集合元素不重复
(2)无序
(3)集合元素是不可变类型
直接{ } 创建的是空字典,不是空集合,创建空集合只能使用set(),
len(set())返回集合长度
1.集合创建
2.集合的运算
不支持 + *
支持in is == < > <= >=
< > <= >= 父集和子集
S1是S2的子集,S2是S1的父集
差集- 并集| 交集& 相对差集
差集:返回在当前集合(被减)中存在,但不在参数集合(减)中的元素
(去除相同元素,被减对象不同返回值不同)
并集:合并两个集合,去除重复的元素
交集:&
相对差集:两个集合中不同时出现的元素
2.集合的相关方法
(1)添加 add()
(2)删除
remove(元素)通过指定删除的元素 原地删除
删除时如果元素不存在,会报错
discard(元素)通过指定删除的元素
删除时如果元素不存在,不报错
pop()随机删除一个元素,并返回被删除的元素。
(3)复制(不区分深拷贝和浅拷贝)
(4)交集、并集、差集、相对差集(对称差集)
差集:返回在当前集合中存在,但不在参数集合中的元素
difference()
带uodate的代表原地修改
交集:带update的是原地修改
并集:带update的是原地修改
对称差集(相对差集):带update的是原地修改
判断交集是否为空,返回Flase或True
判断当前是否为参数集合的子集
判断当前集合是否为参数集合的父集
4.集合的遍历
5.集合推导式
{ 输出表达式 for I in 集合 }
List tuple dict set 数据转换
列表(不含内嵌列表)、元组转换成set时,会去除重复元素。