欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Python——序列

程序员文章站 2022-04-19 15:41:37
一、概览 在python中,最基本的数据结构是序列(sequence)。序列中的每个元素被分配一个序号——即元素的位置,也称为索引。第一个索引是 0,第二个则是 1...

一、概览

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