一、概览
在Python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1,以此类推。序列中的最后一个元素标记为 -1,倒数第二个元素为 -2,一次类推。
Python包含 6 中内建的序列,包括列表、元组、字符串、Unicode字符串、buffer对象和xrange对象。本文重点讨论列表和元组,列表和元组的主要区别在于,列表可以修改,元组则不能。
二、通用序列操作
所有序列类型都可以进行某些特定的操作。这些操作包括:索引(indexing)、分片(sliceing)、加(adding)、乘(multiplying)以及检查某个元素是否属于序列的成员(成员资格)。除此之外,Python还有计算序列长度、找出最大元素和最小元素的内建函数。
1. 索引
序列中的所有元素都是有编号的——从 0 开始递增。这些元素可以通过编号分别访问,如下:
>>> greeting = ‘Hello‘ >>> greeting[0] ‘H‘(字符串就是一个有字符组成的序列。)
使用负数索引时,Python会从右边,也就是从最后 1 个元素开始计数。最后 1 个元素的位置编号是 -1。
>>> greeting[-1] ‘o‘字符串字面值能够直接使用索引,而不需要一个变量引用它们。
>>> ‘Hello‘[1] ‘e‘如果一个函数调用返回一个序列,那么可以直接对返回结果进行索引操作。
>>> fourth = raw_input(‘Year: ‘)[3] Year: 2005 >>> fourth ‘5‘
2. 分片
使用分片操作来访问一定范围内的元素。分片通过冒号相隔的两个索引来实现:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] >>> numbers[3:6] [4, 5, 6] >>> numbers[0:1] [1]第 1 个索引是需要提取部分的第 1 个元素的编号,而最后的索引则是分片之后剩下部分的第 1 个元素的编号。(第 1 个索引的元素是包含在分片内的,而第 2 个则不包含在分片内。)
如果分片中最左边的索引比它右边的晚出现在序列中,结果就是一个空的序列。
>>> numbers[-3:0] []为了让分片部分能够包含列表的最后一个元素,可以通过最后一个元素的下一个元素所对应的索引作为边界,或置空最后一个索引即可:
>>> numbers[7:10] [8, 9, 10] >>> numbers[-3:] [8, 9, 10]置空同样适用于序列开始的元素:
>>> numbers[:3] [1, 2, 3]复制整个序列,可以将两个索引都置空:
>>> numbers[:] [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
3. 步长
进行分片的时候,分片的开始和结束点需要进行指定。而另外一个参数——步长——通常都是隐式设置的。在普通的分片中,步长是 1。
>>> numbers[0:10:1] [1, 2, 3, 4 ,5 , 6, 7, 8, 9, 10]如果步长被设置为比 1 大的数,那么就会跳过某些元素。
>>> numbers[0:10:2] [1, 3, 5, 7, 9] >>> numbers[3, 6, 3] [4]步长不能为 0 —— 那不会向下执行 —— 但步长可以是负数,即从右到左提取元素。
>>> numbers[8:3:-1] [9, 8, 7, 6, 5] >>> numbers[0:10:-2] [] >>> numbers[10:0:-2] [10, 8, 6, 4, 2]使用一个负数作为步长时,必须让开始点(开始索引)大于结束点。
4. 序列相加
>>> [1, 2, 3] + [4, 5, 6] [1, 2, 3, 4, 5, 6] >>> ‘Hello, ‘ + ‘world!‘ ‘Hello, world!‘两种相同类型的序列才能进行连接操作。
>>> [1, 2, 3] + ‘world!‘ Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "str") to list
5. 乘法
用数字 x 乘以一个序列会生成新的序列,而在新的序列中,原来的序列将被重复 x 次。
>>> ‘python‘ * 5 ‘pythonpythonpythonpythonpython‘
6. 成员资格
为了检查一个值是否在序列中,可以使用 in 运算符。
>>> permissions = ‘rw‘ >>> ‘w‘ in permissions True >>> ‘x‘ in permissions False
7. 长度、最小值和最大值
len函数返回序列中所包含元素的数量、min函数和max函数则分别返回序列中最大和最小的元素。
>>> numbers = [100, 34, 678] >>> len(numbers) 3 >>> max(numbers) 678 >>> min(numbers) 34 >>> max(2, 3) 3 >>> min(9, 3, 2, 5) 2