Python通用的序列操作有:索引、切片、乘法、成员资格检查、长度、最小值和最大值。
序列 (sequence)概述
序列 (sequence)是Python最基本的一种数据结构。
序列中的每个元素都有编号,即其位置或索引,其中第一个元素的索引为0,第二个元素的索引为1,依此类推。Python的序列索引支持负数,-1表示序列的最后一个元素,这是Python不同其他很多种语言不同的地方。
Python内置了多种序列,列表、元组、字符串是其中最常用的三种,本文为你描述各种序列的通用操作。
索引
>>> items = ['a', 'b', 'b', 1, 2, 3]
>>> items[3]
1
>>> greeting = 'Hello'
>>> greeting[0]
'H'
索引从0开始,索引号为0的元素为1,greeting的索引号为0的元素为'H'。
你可能注意到'Hello'和'H'都用单引号包围,这是Python不同于其他语言的另一个地方。Python并没有专门用于表示字符的数据类型,因此一个字符就是一个只包含一个元素的字符串。
>>> greeting[-1]
'o'
Python的序列索引支持负数,-1表示倒数第一个元素。
切片(slicing)
切片 (slicing)操作用于访问序列特定范围内的元素。在一对方括号内使用两个索引,并用冒号隔开:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[3:6]
[4, 5, 6]
注意到,返回的序列并未包含愿序列的第6个元素7,就相当于数学集合中的左闭右开区间操作。
换言之,你提供两个索引来指定切片的边界,其中第一个索引指定的元素包含在切片内,但第二个索引指定的元素不包含在切片内。
简写
保留冒号,省略第一个索引,表示从序列起始位置开始切片;省略第二个索引,表示切片到序列末尾,包含最后一个元素:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:3]
[1, 2, 3]
>>> numbers[:3]
[1, 2, 3]
>>> numbers[7:10]
[8, 9, 10]
>>> numbers[7:]
[8, 9, 10]
>>> numbers[-3:]
[8, 9, 10]
>>> numbers[-3:10]
[8, 9, 10]
-
numbers[:3]
等价于numbers[0:3]
,表示取前三个元素。 -
numbers[7:10]
取最后三个元素,可简写为numbers[7:]
, 但更常简写为numbers[-3:]
指定步长
这个操作的效果是:在指定的区间内间隔取元素,语法格式为:
items[index1: index2: step]
例如:
>>> numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> numbers[0:10:2]
[1, 3, 5, 7, 9]
>>> numbers[1:10:2]
[2, 4, 6, 8, 10]
>>> numbers[::2]
[1, 3, 5, 7, 9]
>>> numbers[10:0:-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2]
>>> numbers[-1:0:-1]
[10, 9, 8, 7, 6, 5, 4, 3, 2]
-
前两个操作分别取索引为偶数和奇数的元素
-
索引可以省略
-
省略的步长为1,表示不间隔,间隔不能为0
-
步长可以是负数,此时第一个索引位置必须“大于”第二个索引位置。
步长为正数时,它从起点移到终点,而步长为负数时,它从终点移到起点。
序列相加
可以使用加法运算(+运算符)拼接两个序列:
>>> [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
从错误消息可知,不能拼接列表和字符串,虽然它们都是序列。一般而言,不能拼接不同类型的序列。
序列乘法
将序列与数x 相乘时,将重复这个序列x 次来创建一个新序列:
>>> "Hello " * 5
'Hello Hello Hello Hello Hello '
初始化一个长度为10的空列表:
>>> sequence = [None] * 10
>>> sequence
[None, None, None, None, None, None, None, None, None, None]
成员资格检查(in操作)
成员资格检查判定一个元素是否存在于集合中,如存在返回True,否则返回False,实际上是一个布尔表达式。
语法:
x in list
例如:
>>> 'python' in 'hello, python world'
True
>>> 3 in [2, 3, 4]
True
>>> 5 in [2, 3, 4]
False
长度、最大值、最小值
内置函数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
总结
Python通用的序列操作有:索引、切片、乘法、成员资格检查、长度、最小值和最大值。
网友评论