序列

所谓序列(Sequence), 指的是一系列按顺序排放的值, 可通过每个值所在位置的编号(称为索引)访问它们.

Python内置了多种序列, 其中最常用的是: 列表, 元组和字符串.

  • 在Python中, 列表和元素的元素可以是异构的(即可以是不同的类型);
  • 列表和元组的主要不同在于: 列表是可以修改的, 而元素不可以;
  • 字符串也是一种常见的序列, 可以直接通过索引访问字符串内的字符.

None, 空序列和初始化

  • 在Python中, None表示什么都没有;
  • 空序列, 表示一个元素都没有的序列:
    • 空列表 - []
    • 空元组 - ()
    • 空字符串 - ''

通用的序列操作

有几种操作适用于所有的序列, 包括: 索引, 切片, 相加, 相乘和成员资格检查.

索引

  • 序列中的所有元素都有编号(从0开始递增), 可以使用编号来访问各个元素: seq[index];

    ../../_images/sequence_index_1.png
  • 在Python中, 可以使用负数索引, 表示从右向左数, 因此-1是最右边的一个元素(最后一个元素), -2是右边第二个元素(倒数第二个元素), 以此类推;

    ../../_images/sequence_index_2.png
  • 对于序列的字面量, 可直接对其执行索引操作, 无需先将其赋值给变量.

切片

  • 使用索引是访问特定位置的某一个元素, 而使用切片是访问特定位置范围内的一组元素, 通过切片操作, 可以生成一个新的序列;

  • 切片的使用形式: [start:stop:step]

    切片适用于访问序列的一部分, 其中的编号非常重要:

    • 第一个索引是包含的第一个元素的编号;

    • 第二个索引是切片的最后一个元素的下一个元素的编号, 即切片表示的范围为: [start, stop);

    • step表示前后两个元素之间的步长.

      • 如果没有指定步长, 默认为1;

      • 步长可以为负数, 表示从右向左数(这时需要注意startstop也是从右向左算的);

        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]

成员资格检查

要检查特定的值是否包含在序列中, 使用运算符innot in, 其语法格式为:

value in sequence
value not in sequence

value是要检查的值, sequence是指定的序列.

将运算符in用于字符串时情况比较特殊: 可查找子串.

和序列相关的内置函数

Python提供了一些内置函数, 可用于实现与序列相关的一些常用操作.

序列相关的内置函数
函数 功能
len() 计算序列的长度, 即返回序列中有多少个元素.
max() 找出序列中最大的元素.
min() 找出序列中最小的元素.
list() 将序列转换为列表.
str() 将序列转换为字符串.
sum()

计算元素和.

注意, 对序列使用sum()函数时, 做加和操作的必须都是数字, 不能是字符或字符串,

否则该函数将抛出异常.

sorted 对元素进行排序.
reversed() 反向序列中的元素.
enumerate() 将序列组合为一个索引序列, 多用在for循环中.