生成器推导式创建元组:,生成器推导式与列表推导式类似,只是生成器推导式使用小括号。不管什么方式使用,元素访问结束后,如果需要重新访问其中的元素,必须重新创建该生成器对象。
元组特点:1、不可变序列 2、元组的访问和处理速度比列表快 3、与整数和字符串一样,元组可以作为字典的键,列表永远不能作为字典的键使用。
字典:“键值对”包含键对象和值对象,“键”是任意的不可变数据,比如:整数、浮点数、字符串、元组。字典中通过键对象找到对应的值对象。
字典的创建:1、dict() 2、{} 3、zip() 4、通过fromkeys 创建值为空的字典
>>> a = dict.fromkeys(['name','age','job'])
字典元素的访问:1、通过键获得值,若键不存在,则抛异常! 2、get()方法获得值,有电是键不存在,返回None,也可以设置指定的返回对象。如a.get(‘age’,’不存在’) 3、列出所有的键值对,a.items() 4、列出所有的键或值 a.keys() a.values()
5、len()键值对的个数 6、检测一个“键”是否在字典中,’name’ in a
字典元素的添加、修改、删除:1、新增“键值对”,若已存在,则覆盖旧的键值对。否则新增。 2、update()将字典中所有的键值对全部添加到旧字典对象上,若key有重复,则覆盖。
字典中元素的删除,可以使用del()方法,或者clear()删除所有的键值对,pop()删除指定
键值对,并返回对应的“值对象”;
字典是“无序可变序列”,可用popitem()随机删除和返回该键值对。
序列解包用于元组、列表、字典。对字典解包,分三种情况。对键解包,对键值解包,对值解包。
字典核心底层原理:其核心是散列表,是一个稀疏数组,每个数组单元叫bucket,其包含两个部分,一个是键对象的引用,一个是值对象的引用。偏移量也就是次方的意思,2的3次方是8,2的6次方是32。
python 会根据散列表的拥挤程度扩容。“扩容”指的是:创造更大的数组,将原有内容
拷贝到新数组中。接近2/3 时,数组就会扩容。
取出键值对的过程如下:
用法总结:1、键必须可散列(数字、字符串、元组)2、自定义对象需要支持下面三点(1、支持hash()函数 2、支持通过__eq__()方法检测相等性 3、若a == b为真,则hash(a)==hash(b)也为真)
3、字典在内存中开销巨大,典型的空间换时间。 4、键查询速度较快 5、字典可能存在扩容,导致散列表中键的次序变化,因此不要再遍历字典的同时进行字典的修改。
集合:无序可变,元素不能重复,实际是字典实现,集合中所有的元素都是字典中的键对象。
集合创建和删除:del只是删除一个对象的引用而已,并不是删除其内存。1、用{}进行创建,用add()添加元素 2、使用set(),将可迭代对象变成集合 3、remove()删除指定元素 5、clear()清空整个集合
集合相关操作:并、交、差
以a创建name整个键值对为例
假设数据长度为8的话,示意图如下