您的位置:首页 > 编程语言 > Python开发

Python 第二章 列表和元组(2) 通用序列操作

2014-12-02 21:45 465 查看
所有序列类型都可以进行某些特定的操作。

这些操作包括:索引、分片、加、乘以、检查成员资格、计算序列长度、找出最大元素和最小元素。

索引

序列中的所有元素都是有编号的——从0开始递增。这些元素可以通过编号分别访问。

>>> word = 'hello'

>>> word[0]

'h'

>>> word[1]

'e'

注意:这里字符串就是一个由字符串组成的序列。索引0指向第1个元素,在这个例子中就是字符h。

>>> word[-1]

'o'

索引的值也可以为负。最后1个元素的位置编号是-1.

这就是索引,可以通过元素的位置直接获取元素。

分片

分片操作用来访问一定范围内的元素。

>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[3:6]

[4, 5, 6]

>>> numbers[0:1]

[1]

>>> numbers[2:1]

[]

注意:分片中最左边的索引比右边的索引出现的晚,结果就是一个空的序列。

在这个例子中将numbers[a:b]中a看成左边界,b看成右边界。a边界包含在分片内,b边界不包含在分片内,而a和b之间都包含在分片内。

若用数学的区间来理解更方便一些即分片区间是[a, b). a值、a与b两点之间的整数值都是分片内的值。

>>> numbers[7:10]

[8, 9, 10]

注意:索引10指向的是第11个元素——这个元素并不存在,但这个索引却在numbers这个列表的最后一个元素之后。

这是为了让分片部分能够包含列表的最后一个元素,所以必须提供最后一个元素的下一个元素对应的索引作为边界。

1, 2, 3, 4, 5, 6 , 7, 8, 9, 10

↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑

0 1 2 3 4 5 6 7 8 9 10

边界为负值的情况:

>>> numbers[-3: -1]

[8, 9]

我们知道索引-1已经是指向列表的最后一个元素了。那么分片的负数情况访问最后的元素呢?

>>> numbers[-3 : 0]

[]

这不是我们想要的结果。 幸好有个捷径,就是置空最后一个索引即可:

>>> numbers[-3:]

[8, 9, 10]

再看看置空前面的索引

>>> numbers[:3]

[1, 2, 3]

置空两边的索引

>>> numbers[:]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

分片更大的步长

进行分片的时候,除了分片的开始和结束点两个参数之后,还有一个参数——步长。这个参数通常都是隐使设置的,在默认情况下,分片的步长是1.

分片操作就是按照这个步长逐个遍历序列的元素,然后返回开始和结束点之间的满足步长的元素。

>>> numbers[0:10:1]

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> numbers[0:10:2]

[1, 3, 5, 7, 9]

>>> numbers[::3]

[1, 4, 7, 10]

>>> numbers[::4]

[1, 5, 9]

步长为1,分片中的每个元素都被现实。

步长为2,分片中的从开始到结束每隔1个元素显示1个元素。

......

注意: 步长不能为0

步长为负数的情况(即从右到左提取元素):

>>> numbers[8:3:-1]

[9, 8, 7, 6, 5]

>>> numbers[10:0:-2]

[10, 8, 6, 4, 2]

>>> numbers[::-2]

[10, 8, 6, 4, 2]

>>> numbers[0:10:-2]

[]

>>> numbers[5::-2]

[6, 4, 2]

>>> numbers[:5:-2]

[10, 8]

当使用一个负数作为步长的时候,必须让开始索引大于结束索引。

在没有明确指定开始索引和结束索引的时候,正数步长会从序列的头部开始向右提取元素,直到最后一个元素;负数步长,则从序列的尾部开始向左提取元素,直到第一个元素。



通过加号可以进行序列的连接操作:

>>> [1, 2, 3] + [4, 5, 6]

[1, 2, 3, 4, 5, 6]

>>> 'Hello ' + 'world!'

'Hello world!'

>>> [1, 2, 3] + 'Hello '

Traceback (most recent call last):

File "<pyshell#33>", line 1, in <module>

[1, 2, 3] + 'Hello '

TypeError: can only concatenate list (not "str") to list

注意:列表和字符串是无法连接在一起的,尽管它们都是序列。

简单来说,两种相同类型的序列才能进行连接操作。



>>> 'Python' * 5

'PythonPythonPythonPythonPython'

>>> [42] *10

[42, 42, 42, 42, 42, 42, 42, 42, 42, 42]

>>> [None] * 5

[None, None, None, None, None]

用一个数字x乘以一个序列会生成新的序列,这个新序列原来序列重复x次来的。

注意:None是Pyhon的一个内建值,含义是“这里什么也没有”。一般用来初始化。

如果想创建一个占用五个元素空间,却不包括任何内容的列表。就用None。

成员资格

用in运算符来检查仪个值是否在序列中。in是个布尔运算符,是对一个条件的判断。若条件为真,则返回True; 若条件为假,则返回False.

>>> permissions = 'rw'

>>> 'w' in permissions

True

>>> 'x' in permissions

False

>>> users = ['louis', 'tom', 'bob']

>>> raw_input('Enter you name: ') in users

Enter you name: louis

True

>>> raw_input('Enter you name: ') in users

Enter you name: Luke

False

长度、最小值和最大值

内建函数len、min和max常常用到。

len函数返回序列中元素的数量

min函数返回序列中最小的元素的值

max函数返回序列中最大的元素的值

>>> numbers

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

>>> len(numbers)

10

>>> min(numbers)

1

>>> max(numbers)

10

这里min和max函数的参数是一个序列

>>> max(1, 22, 33, 42)

42

>>> min(0, 4, -1)

-1

注意: max min函数的参数并不是以个序列,而是多个数字直接作为参数。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: