Python序列详解

发布于 2020-05-17  786 次阅读


什么是序列?

序列指的是一块可以存储多个值的连续内存空间,这些值按一定顺序排列、可通过每个值所在位置编号(索引)访问它们。

Python中string、list、tuple、dict、set、bytes、bytearray都是序列类型。序列都可以进行的操作包括索引、切片、乘、加,dict、set比较特殊不支持 索引、切片、相加和相乘操作 。最常见的是list、tuple。

序列索引

序列中,每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从 0 开始递增,如图 1 所示。

>>> a='chenshiyang'
>>> a[0] #通过索引访问元素
'c'
>>> a[-1]
'g'
>>> a[5]
'h'

序列切片

切片操作是访问序列中元素的另一种方法,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。

序列实现切片操作的语法格式如下:

sname[start : end : step]其中,各个参数的含义分别是:

  • sname:表示序列的名称;
  • start:表示切片的开始索引位置(包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片;
  • end:表示切片的结束索引位置(不包括该位置),如果不指定,则默认为序列的长度;
  • step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
>>> a='chenshiyang'
>>> a[0:3] # 取0到3字符,不包括索引3位置的字符串
'che'
>>> a[::1] # 取全部
'chenshiyang'
>>> a[::2] # 每隔两个字符取一个
'cesiag'
>>> a[::-1] # 字符串反转
'gnayihsnehc'
>>> a[:] # 取全部
'chenshiyang'
>>> a[0:9:4] # 0-9索引所在处,每隔4个字符取一个
'csa'

序列相加

Python 中,支持两种类型相同的序列使用“+”运算符做相加操作,它会将两个序列进行连接,但不会去除重复的元素。

这里所说的“类型相同”,指的是“+”运算符的两侧序列要么都是序列类型,要么都是元组类型,要么都是字符串。

>>> a='chenshiyang'
>>> a+':Hi'
'chenshiyang:Hi'

序列相乘

Python 中,使用数字 n 乘以一个序列会生成新的序列,其内容为原来序列被重复 n 次的结果。

>>> a*3
'chenshiyangchenshiyangchenshiyang'
>>> b=[None]*3 # 列表比较特殊在初始化的可以指定长度
>>> b
[None, None, None]

检查元素是否包含在序列中

Python 中,可以使用 in 关键字检查某元素是否为序列的成员,其语法格式为:

value in sequence 或者 value not in sequence

>>> a='chenshiyang'
>>> 'chen' in a
True
>>> 'chen' not in a
False

序列相关的内置函数

函数功能
len()计算序列的长度,即返回序列中包含多少个元素。
max()找出序列中的最大元素。注意,对序列使用 sum() 函数时,做加和操作的必须都是数字,不能是字符或字符串,否则该函数将抛出异常,因为解释器无法判定是要做连接操作(+ 运算符可以连接两个序列),还是做加和操作。
min()找出序列中的最小元素。
list()将序列转换为列表。
str()将序列转换为字符串。
sum()计算元素和。
sorted()对元素进行排序。
reversed()反向序列中的元素。
enumerate()将序列组合为一个索引序列,多用在 for 循环中。
>>> a='chenshiyang'
>>> len(a) # 获取长度
11
>>> max(a) # 获取最大字符
'y'
>>> min(a) # 获取最小字符
'a'
>>> list(a) # 转为list
['c', 'h', 'e', 'n', 's', 'h', 'i', 'y', 'a', 'n', 'g']
>>> str(a) # 转为字符串
'chenshiyang'
>>> sorted(a) # sorted排序会保留原序列
['a', 'c', 'e', 'g', 'h', 'h', 'i', 'n', 'n', 's', 'y']
>>> a
'chenshiyang'
>>> b=reversed(a) # reversed反转序列会保留原序列
>>> list(b)
['g', 'n', 'a', 'y', 'i', 'h', 's', 'n', 'e', 'h', 'c']
>>> a
'chenshiyang'
>>> for index, item in enumerate(a): #将序列组合为一个索引序列
...     print(index, item)
...
0 c
1 h
2 e
3 n
4 s
5 h
6 i
7 y
8 a
9 n
10 g
>>> a=[1,2,3,4] # 
>>> sum(a) # 只能数字类型 bool、int、float、complex
10

注意序列是可迭代对象,但不是迭代器。


一名测试工作者,专注接口测试、自动化测试、性能测试、Python技术。