1. 序列
所谓序列,指的是一块可存放多个值的连续内存空间,这些值按一定顺序排列,可通过每个值所在位置的编号(称为索引)访问它们。
python中的序列有字符串、列表和元组类型,它们具有以下共同的特征:
- 都可以通过索引去获取一个元素
- 都可以通过切片获取多个元素
- 都是可迭代对象,都可以遍历
- 都有共同的内置函数
- 都有共同的运算符
2. 序列的索引
序列中,每个元素都有属于自己的编号(索引)。从起始元素开始,索引值从 0 开始递增,如图 1 所示。 字符串x = "python"的索引展示
| ‘p’ | ‘y’ | ‘t’ | ‘h’ | ‘o’ | ‘n’ |
---|
正索引 | 0 | 1 | 2 | 3 | 4 | 5 | 负索引 | -6 | -5 | -4 | -3 | -2 | -1 |
索引根据访问的方向可分为正索引和负索引,正索引从0开始,负索引从-1开始。
3. 序列的切片
切片操作是访问序列中元素的另一种方法,相对于通过索引访问单个元素,它可以访问一定范围内的元素,通过切片操作,可以生成一个新的序列。
切片的语法:
sequence[start : end : step]
其中,各个参数的含义分别是: sequence:表示序列的名称; start:表示切片的开始索引位置(闭区间,包括该位置),此参数也可以不指定,会默认为 0,也就是从序列的开头进行切片; end:表示切片的结束索引位置(开区间,不包括该位置),如果不指定,则默认为序列的长度; step:表示在切片过程中,隔几个存储位置(包含当前位置)取一次元素,也就是说,如果 step 的值大于 1,则在进行切片去序列元素时,会“跳跃式”的取元素。如果省略设置 step 的值,则最后一个冒号就可以省略。
举例:
# 字符串
x1 = "python"
x1_1 = x1[2:] # 从索引2开始取数据,直至结束
print(x1_1, type(x1_1))
# 列表
x2 = [1, 4, 6, 3, 2, 1, 3, 3]
x2_1 = x2[1:6:1] # 从索引1开始取数据,步长为1
x2_2 = x2[1:6:2] # 从索引1开始取数据,步长为2,也就是跳1个索引再取
print(x2_1, type(x2_1))
print(x2_2, type(x2_2))
# 元组
x3 = (1, 4, 6, 3, 2, 1, 3, 3)
x3_1 = x3[1:6:1] # 从索引1开始取数据,步长为1
x3_2 = x3[1:6:2] # 从索引1开始取数据,步长为2,也就是跳1个索引再取
print(x3_1, type(x3_1))
print(x3_2, type(x3_2))
 负索引举例:
# 字符串
x1 = "python"
x1_1 = x1[-4:] # 从索引2开始取数据,直至结束
print(x1_1, type(x1_1))
# 列表
x2 = [1, 4, 6, 3, 2, 1, 3, 3]
x2_1 = x2[1:-2:1] # 从索引1开始取数据,步长为1
x2_2 = x2[1:-2:2] # 从索引1开始取数据,步长为2,也就是跳1个索引再取
print(x2_1, type(x2_1))
print(x2_2, type(x2_2))
# 元组
x3 = (1, 4, 6, 3, 2, 1, 3, 3)
x3_1 = x3[1:-2:1] # 从索引1开始取数据,步长为1
x3_2 = x3[1:-2:2] # 从索引1开始取数据,步长为2,也就是跳1个索引再取
print(x3_1, type(x3_1))
print(x3_2, type(x3_2))
特殊用法:
[::-1] # 步长可以带符号,为正时表示从前往后,为负时表示从后往前
举例:
x1 = [1, 2, 3, 4]
x2 = x1[::-1]
x2

4. 序列的可迭代性
序列是可迭代的,支持for循环遍历
s = "123456"
l = [1, 2, 3, 4, 5, 6]
t = (1, 2, 3, 4, 5, 6)
for x in s: # 字符串的遍历
print(x, end=',')
print()
for x in l: # 列表的遍历
print(x, end=',')
print()
for x in t: # 元组的遍历
print(x, end=',')
print()

5. 序列的内置函数

s = "123456"
l = [1, 2, 3, 4, 5, 6]
t = (1, 2, 3, 4, 5, 6)
print(len(s), len(l), len(t))

l = [1, 2, 3, 4, 5, 6]
for x in l:
print(x, end=',')
print()
for x in enumerate(l):
print(x, end=',')

6. 序列的运算符
- in:元素是否存在于序列中
- not in:元素是否不存在于序列中
- 序列加法
- 序列乘法
l = [1, 2, 3, 4, 5, 6]
5 in l # 判断5是否存在于列表l中

s = "123456"
l = [1, 2, 3, 4, 5, 6]
t = (1, 2, 3, 4, 5, 6)
print(s*3, l*3, t*3)

|