相关知识----字典集合
三、元组
列表是可变序列,元组是不可变序列
(一)元组创建、迭代器等生成元组
1. 元组名=(,)或者元组名=,
2. 通过tuple()创建元组 元组名=tuple()
Tuple可以接收列表、字符串、其他序列类型等元组
List接收元组字、符串、其他序列、类型迭代器等列表
(二)元组元素访问和计数
1.元组元素不能修改
2.元组元素的访问、index()、count()、切片等操作和列表一样
3.元组修改原列表对象。对元组进行排序,只能使用内置函数sorted(tupleObj),并生成新的列表对象。
4.zip(列表1,列表2)将多个列表对应位置的元素组合成元组,并返回zip对象
(三)生成器推导式创建元组
1.从形式上看,生成器推导式与列表推导式类似,只是生成器推导式使用小括号
2.列表推导式直接生成列表对象,生成器推导式生成的不是列表也不是元组,而是一个生成器对象
3.可以通过生成器对象,转换成列表或者元组。也可以使用生成器对象的_next_()方法进行遍历,或者直接作为迭代器对象使用。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象
(四)元组总结
1.元组核心特点是:不可变序列
2.元组访问和处理速度比列表快
3.与整数和字符串一样,元组可以作为字典的键,列表永远不能作为列表的键使用
四、字典
(一)基本概念
1.字典是“键值对”的无序可变序列,字典中的某一个元素都是一个“键值对”,包含:“键对象”和“值对象。可以通过“键对象”实现快速获取、删除、更新对应的“值对象”
2.定义方式 名称{键对象:值对象,}
3.字典中的键对象找到对应的值
4
(1)键是任意不可变数据
(2)列表、字典、集合、不能作为“键”
(3)“键”不可重复,后面的键取代前面的重复“值”是可以任意的数据,并且可重复
(二)字典的创建
1. 通过{} 、dict()函数创建
2. 通过zip()创建
3. 通过fromkeys创建值为空的字典
(三)字典元素的访问
1. 通键获得值:键不存在,抛出异常
2. get方法;键不存在时返回none,也可以设置默认返回对象
3. 列出所有的键值对。.item
4. 列出所有的键列出所有的值 .key .value
5. len()键值对个数
6. 检测一个键是否在字典中 in
(四)字典元素添加、修改、删除
1. 给字典新增键值对:键存在,覆盖值;键不存在新增键值对。
2. 使用update()将新字典中所有键值对全部添加到就旧字典对象上,如果key存在则值覆盖
3. 字典元素删除 del(删除某一个键) clear(删除字典所有元素) pop删除某一个键值对返回值 popitem()随机删除字符对
(五)序列解包
1. 序列解包用于列表、元组、字典
2. 在对字典进行序列解包时,默认是对键进行操作;如果需要对键值对进行操作需要item;对值进行操作需要values()
(六)字典底层原理
1. 创建过程:字典对象核心是散列表,散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两个部分:一个是键对象的引用,一个是值对象的引用。由于所有的bucket结构和大小一致,我们可以通过偏移量来读取指定bucket
(1)将一个键放入字典底层原理,假设创建字典a对象完成后,数组长度为8.要把“键值对”放入到字典中需要计算键的散列值。Pytohn可以通过hash函数计算。由于数组长度是8可以拿计算出的散列值最右边的3位数字(长度是16四位的找)作为偏移量,将最右边的三位数转成十进制数,查看偏移量对应的bucket是否为空,若为空则键值对放进去。如果不为空,一次右边3位作为偏移量,直到找到buckeet将键值对放进去
(2)Python会根据散列表的拥挤程度扩容,将原有内容复制过来。接近2/3之时扩容
2. 根据键查找键值对底层过程:依次取散列值不同位置的数字。计算方法同创建过程。判断对应的bucket是否是为空。为空返回none。不为空则将bucket的键对象计算对应散列值,和原散列值进行比较,如果相等,对应的值对象返回,不相等依次取其他数字重新计算。取完后,仍然没有没有找到。则返回none
五、集合
集合是无序可变,元素不能重复。实际上,集合底层是字典实现,集合所有的元素都是字典中的“键对象”,因此不能重复的且唯一的。
(一)集合的创建和删除
1使用{}创建集合,使用add方法添加到元素
2.使用set(),可将列表元组等可迭代对象转成集合。如果原来的数据重复,则保留一个
3. remove()删除指定元素,clear()清空集合
(二)相关操作
1. 并集 | union
2. 交集 & intersection
3. 差集 - difference