序列¶
所谓序列(Sequence), 指的是一系列按顺序排放的值, 可通过每个值所在位置的编号(称为索引)访问它们.
Python内置了多种序列, 其中最常用的是: 列表, 元组和字符串.
- 在Python中, 列表和元素的元素可以是异构的(即可以是不同的类型);
- 列表和元组的主要不同在于: 列表是可以修改的, 而元素不可以;
- 字符串也是一种常见的序列, 可以直接通过索引访问字符串内的字符.
None, 空序列和初始化¶
- 在Python中,
None表示什么都没有; - 空序列, 表示一个元素都没有的序列:
- 空列表 -
[] - 空元组 -
() - 空字符串 -
''
- 空列表 -
通用的序列操作¶
有几种操作适用于所有的序列, 包括: 索引, 切片, 相加, 相乘和成员资格检查.
索引¶
序列中的所有元素都有编号(从0开始递增), 可以使用编号来访问各个元素:
seq[index];
在Python中, 可以使用负数索引, 表示从右向左数, 因此
-1是最右边的一个元素(最后一个元素),-2是右边第二个元素(倒数第二个元素), 以此类推;
对于序列的字面量, 可直接对其执行索引操作, 无需先将其赋值给变量.
切片¶
使用索引是访问特定位置的某一个元素, 而使用切片是访问特定位置范围内的一组元素, 通过切片操作, 可以生成一个新的序列;
切片的使用形式:
[start:stop:step]切片适用于访问序列的一部分, 其中的编号非常重要:
第一个索引是包含的第一个元素的编号;
第二个索引是切片的最后一个元素的下一个元素的编号, 即切片表示的范围为:
[start, stop);step表示前后两个元素之间的步长.如果没有指定步长, 默认为1;
步长可以为负数, 表示从右向左数(这时需要注意
start和stop也是从右向左算的);Example:
List = [1, 2, 3, 4, 5, 6] # 使用负数步长 # start和stop的索引也是使用负索引来表示 print(List[-1:-6:-2])
不论是从左向右数还是从右向左数, 如果第一个索引指定的元素位于第二个索引指定的元素后面, 结果就为一个空序列.
如果切片开始于序列开头, 可省略第一个索引;
如果切片结束于序列末尾, 可省略第二个索引;
第一个和第二个索引都省略, 表示整个序列;
切片得到的类型和源的类型是一致的, 列表的切片是列表, 元组的切片是元组, 字符串的切片是字符串.
序列相加¶
在Python中, 两个相同类型的序列可以使用+运算符做相加操作, 它会将两个序列进行拼接.
注解
这里所说的”相同类型”, 指的是+运算符的两侧序列要么都是列表, 要么都是元组, 要么都是字符串.
乘法¶
将序列与数N相乘时, 表示重复这个序列N次来创建一个新的序列.
比较特殊的是, 列表类型在进行乘法运算时, 还可以实现初始化指定长度列表的功能.
例如如下的代码, 将创建一个长度为5的列表, 列表中的每个元素都是None, 表示什么都没有.
List = [None] * 5
print(List)
输出结果为:
[None, None, None, None, None]
成员资格检查¶
要检查特定的值是否包含在序列中, 使用运算符in和not in, 其语法格式为:
value in sequence
value not in sequence
value是要检查的值, sequence是指定的序列.
将运算符in用于字符串时情况比较特殊: 可查找子串.
和序列相关的内置函数¶
Python提供了一些内置函数, 可用于实现与序列相关的一些常用操作.
| 函数 | 功能 |
len() |
计算序列的长度, 即返回序列中有多少个元素. |
max() |
找出序列中最大的元素. |
min() |
找出序列中最小的元素. |
list() |
将序列转换为列表. |
str() |
将序列转换为字符串. |
sum() |
计算元素和. 注意, 对序列使用 否则该函数将抛出异常. |
sorted |
对元素进行排序. |
reversed() |
反向序列中的元素. |
enumerate() |
将序列组合为一个索引序列, 多用在for循环中. |