Python——序列


一、概览

在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 "", line 1, in 
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



评论关闭