Sequence 是 Python 的一种内置类型(built-in type),内置类型就是构建在 Python Interpreter 里面的类型,几个基本的 Sequence Type 比如 list(表),tuple(定值表,或翻译为元组),range(范围)可以看作是 Python Interpreter 定义了这样三个 class。
序列有着相同的访问模式:它的每一个元素都可以通过指定一个偏移量的方式得到,而要想一次得到多个元素,我们可以使用切片,下表偏移量从0开始,总元素数减1结束。
Python 在操作一组数据时,通常是用序列来表示这组信息。(序列也可以包含其他序列)
Python还有一种叫做容器的数据结构。容器是包含其他对象的任意对象。序列(如元组和列表)和映射(比如字典)就是两类主要的容器。序列的每个元素有自己的编号(元组可以作为字典的键名),而映射的每个元素则有一个自己的名字(键)。另外还有种容器类型既不是序列也不是映射,叫做集合。
通用的序列操作
所有序列类型的数据结构都可以进行某些特定的操作,如;索引 、分片 、加 、乘 和检查每个元素是否属于序列的成员(成员资格 )。序列类型的操作符如下:
1. 索引
序列的所有元素都有自己的编号,从0开始,通过编号访问即为索引。
>>>indexing = 'python'
>>>indexing[1]
'y'
>>>indexing[-1]
'n'
或者字符串直接索引
>>>'python'[0]
'p'
2. 切片操作符([,]/[:]/[::]) / 分片
使用索引是用来访问单个元素,而使用分片操作是用来访问一定范围内的元素。分片是通过冒号相隔的两个索引来实现。
>>> sliceing = 'python'
>>> sliceing[9:33]
'http://www.nowamagic.net'
>>>
>>>num= [1,2,3,4,5,6]
>>>num[3:6]
[4, 5, 6]
>>>num[-3:-1]
[4, 5]
>>>num[-3:]
[4, 5, 6]
>>>num[:]
[1,2,3,4,5,6]
分片有个隐式的设置:步长。上面的步长都为1。
比如:
>>>num= [1,2,3,4,5,6]
>>>num[3:6:1] #这边是个隐藏的步长1
[4, 5, 6]
>>>num[3:6:2] #步长改为2
[4, 6]
3. 连接操作符(+) / 序列相加
通过加号来进行序列的连接操作。
有几个要注意的地方:
类型必须相同;
返回一个新序列;
并不推荐(效率不高);
与join()、extend()之间的比较;
>>>[1,2]+[3,4]
[1,2,3,4]
>>>[1,2]+'python'
TypeError: can only concatenate list (not "str") to list
#报错了,相同类型的序列才能进行连接操作。
4. 重复操作符 / 乘法
用数字x乘以一个序列得到新的序列,新的序列为原来的序列重复x次。
>>>[1] * 3
[1, 1, 1]
再比如:
>>> str="abc"
>>> str*4
'abcabcabcabc'
注意:
执行copy,创建新序列;
序列后面是1个*;
*后面必须是整型;
该操作符返回一个新的包含多份原对象copy的对象。
5. 成员资格 (检测元素是否属于序列的成员)
要检查一个值是否在序列中,可以使用in运算符。返回的是布尔值。
>>>per = 'python'
>>>'py' in per
True