一、序列
1.id函数 is运算符
我们首先思考下字符串、元组、列表的共同点:
都有很多共同的运算符。都可以通过索引来获取元素,第一个元素索引都是0,都可以通过切片的方法获取某个范围内元素的集合。
以上三种统称为序列。序列分为可变序列和不可变序列。
+ 表示两个序列进行拼接,*表示重复。
Python中的每一个对象都有三个部分:类型、值、地址。id 函数返回一个对象的具体内存地址。
is 和is not称为同一性运算符。is运算符用来判断两个对象是否指向唯一地址的引用,尽管值相同,地址可能不同,is运算符仍然返回FALSE。
注意看这里,不可变序列进行乘2操作时,它的地址没有改变;而可变序列进行乘2操作,地址改变
2.in 和not in,del语句
in运算符用于判断一个对象是否在另一个对象里。del语句用于删除一个或多个指定的对象。
3.列表 元组 字符串转换
转换成列表用list函数
转换成元组用tuple函数
转换成字符串用str函数
4.最小最大函数
5.len 和sum函数
len函数对于32位平台来说,最大能检测2^32-1这么长的对象。
sum用于求和。
6.排序和逆转
sort是列表的内置函数,只能对列表起作用,而sorted是普通函数,对列表、字符串、元组都有作用。设定reverse=TRUE,将会逆转列表。
sort会改变原本的列表,而sorted是生成一个 新的列表,原本列表不会更改。
key参数是一个可选参数,用于指定一个函数,该函数将作用于可迭代对象中的每个元素,以生成排序时用于比较的键。元素根据这些键进行排序,而不是直接比较元素本身。
reversed函数返回的是一个反向迭代器,可以用list函数转化为我们想要的列表。
7.all 和any函数
all函数判断是否所有元素的值都为真,any函数判断是否有某个元素的值为真。
8.enumerate列举函数
将一个可迭代对象生成一个枚举对象,该对象包含每个元素的索引和对应的值,常用于循环迭代时获取元素的索引位置。
9.zip函数
可以看到,当长度不匹配时,我们以最短的为准。如果想要以最长的为准,我们需要用itertools模块的zip_longest函数
10.map函数
map()
函数会对每个可迭代对象中的元素依次应用 function
函数,并将结果组成一个新的可迭代对象返回。如果传入的可迭代对象长度不等,则 map()
函数会以最短的可迭代对象为准,其他较长的可迭代对象的元素将被忽略。
11.可迭代对象与迭代器
迭代器一定是可迭代对象。不过迭代器只能使用一次,而可迭代对象一直可以使用,
filter()函数是内置函数之一,用于过滤可迭代对象中的元素,返回满足指定条件的元素的迭代器。
iter函数用于将可迭代对象转化为迭代器,next函数可以逐个获取迭代器中的元素。
二、字典
字典是Python中唯一实现映射关系的内置类型。
1.字典基本语法
字典(Dictionary)是一种无序的集合数据类型,用于存储键(key)-值(value)对。字典是可变的,可以添加、删除和修改其中的元素。字典的键必须是唯一的,而值可以是任意的数据类型。
创建字典的二种方式,以及打印获取字典的元素:
增加或者删除字典中的元素:
判断元素是否在字典中,以及获取字典的长度:
快速初始化字典:fromkeys方法
在序列中元素是可以重复的,字典中的项(也就是键值对)是不可以重复的。一个键就是对应一个值,不会重复对应。
删除字典中的元素可以用pop方法:
popitem方法也可以用来删除,在Python3.7之后用于删除最后一个键值对:
如果我们只希望清除字典的内容,可以使用clear方法。
改:修改字典中的值可以用update方法,update方法更新字典中指定键的值,也可以传入一个字典更新全部的键值对。
查找键对应的值用get方法:
查找是否存在一个键用setdefault方法,并且可以指定default参数,用于键不存在时自动添加。
2.获取键值对、键、值的视图对象
items(),values(),keys()方法分别获取键值对、值、键的视图对象。当字典发生更新时,视图对象也一起更新。
3.其它方法与嵌套
copy用于浅拷贝,len用于获取键值对数量,list用于字典转换成列表,iter用于字典转成迭代器。
嵌套字典和列表一样,并不是稀奇事:
4.字典推导式
如上图所示,我们的字典推导式让键值对互换,理由是:items获取到了键值对,键是k,值是v,我们前面重新构成字典的是v:k,这样就完成了键值对互换。
同样的,我们也可以利用推导式获取字符串的编码值:
为什么下面这段代码输出是这样?因为x等于1时,y从2,4,6分别取值,只不过一个键只能对应一个值,因此会被6覆盖掉,其它两个数字同理。
三、集合
集合拥有无序性、互异性,集合内的元素不允许重复,并且集合是无顺序存放的,集合和字典有着密切关系。
1.创建
创建集合有三种方式,集合推导式、set内置函数、直接大括号创建
由于集合元素没有顺序,因此通过下标获取集合元素是不可行的。
检查一个序列是否有重复元素可以利用集合,去重也可以利用集合:
2.子集 超集 对称差
判断集合之间是否不相关:isdisjoint()
是否是子集:issubset() 是否是超集 issuperset()
计算当前集合和其它集合构成的并集、交集、差集:union,intersection,difference
上述这些方法支持多个集合一起求交集、并集、差集。
对称差集合为symmetric_difference()只能支持一个参数
Python提供了运算符来判断集合关系,<=为真子集,<为子集,>为超集,>=为真超集
|为并集,&为交集,-为差集,^为对称差集
3.不可变集合frozen
只适用于set的方法:
同时,求交intersection_update...等等方法,会改变s这个集合,因此也只用于set
注意这里,update方法传入字符串是迭代获取每个元素,但是add方法是传入字符串一个整体。
删除用remove或者discard,不同之处在于remove遇到没有的元素会出现异常,而discard会不进行任何操作。
删除还有pop方法,用于从集合中随机删除一个元素。
4.可哈希
想要正确创建字典和集合,要求字典的键和集合元素都是可哈希的。
可变对象是不可以计算哈希值的。
上图可以看出,集合元素必须是不可变对象。
那么我们如何实现嵌套集合呢?用frozen_set!
集合背后有散列表的支持,而列表则没有,所以,列表的每次查找都要从头到尾地扫描,而集合只需要简单地查表操作。