1 简介
序列类型包括字符串(普通字符串和unicode字符串)、列表和元组,所谓序列,即成员有序排列,并且可以通过下边偏移量访问到它的一个或者几个成员。假设序列有n个元素,访问单个元素时,下标从0开始,到n-1结束,如果是逆序访问,下标从-1开始,到-n结束,切片操作支持多个元素的访问。
2 序列类型分类
按照能否被修改分为可变或不可变类型。
可变序列:list、collections.deque、bytearray、memoryview、array.array等。
不可变序列:str、bytes和tuple。
可变与不可变:但是str不是可变类型么?stra = strb + 'hello'这样的表达式不是很常用么? 其实并不是这样的,当你执行上面得表达式的时候,python会为重新创建新的对象,并将stra指向该对象。
图1:序列类型间关系
UML 类图列举了collections.abc中的几个类(超类在左边,箭头从子类指向超类,斜体名称代表抽象类和抽象方法),显示了可变序列(MutableSequence)和不可变序列(Sequence)的差异,同时也能看出前者从后者那里继承了一些方法。虽然内置的序列类型并不是直接从Sequence和MutableSequence这两个抽象基类(Abstract Base Class,ABC)继承而来的,但是了解这些基类可以帮助我们总结出那些完整的序列类型包含了哪些功能。
3 列表深入
本篇幅重点在于深入分析序列类型,因此这里不再介绍列表的基础用法,重点介绍列表的常用但是难懂的地方。
列表推导:列表推导可以方便的生成我们需要的列表格式。
图2:列表推导式
图3: for循环下列表推导式
4 元祖深入
元组tuple,作为列表的升级版,是一种非常安全的数据结构。它的一级元素只能查,不能增、删、改。除此之外,列表支持的操作,元组都能支持。元组还可以实现封装和拆封。当我们要创建的数据不希望被修改时,请放心大胆地使用元组。如果我们真的需要对元组进行修改,我们可以间接进行(可转化为列表或字符串)。
元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可以有或没有括号,不过带括号是一种更好的规范。为区别于函数,最好的习惯是在元组的最后加上逗号。虽然元组和列表很类似,它们经常被用来在不同的情况和不同的用途。元组有很多用途。例如 (x, y) 坐标对,数据库中的员工记录等等。元组的内置函数仅仅只提供了两个,分别是:count(value) 和 index(value, strat=None, stop=None)。
图4: 元祖深入
图5: 元祖封装和拆封
领取专属 10元无门槛券
私享最新 技术干货