在前面的教程中,已经简单介绍了“列表”和“字符串”的切片操作。切片是Python序列的重要操作之一,所有的序列类型都可以进行切片操作。例如:
动手练一练:
# 列表
a = [5, 6, 7, 8]
print('列表')
print(a[0:2]) # 输出[5, 6]
print(a[2:3]) # 输出[7]
print('------这是虚线------')
# 元组
b = (5, 6, 7, 8)
print('元组')
print(b[0:2]) # 输出(5, 6)
print(b[2:3]) # 输出(7,),如果元组只有一个元素,则这个元素后面必须有“,”。
print('------这还是虚线------')
# 字符串
c = "5678"
print('字符串')
print(c[0:2]) # 输出56
print(c[2:3]) # 输出7
执行以上代码,输出结果为:
列表
[5, 6]
[7]
------这是虚线------
元组
(5, 6)
(7,)
------这还是虚线------
字符串
56
7
上面的例子中切片能够帮助我们取出一个范围对应的元素,切片操作的实现需要提供两个索引作为边界(默认是左闭右开的区间),第一个索引的元素包含在切片内(闭区间),第二个索引的元素不包含在切片内(开区间)。切片在数学上的区间范围表示为“[a,b)” ,切片内容满足这个区间,a是切片的第一个参数,b是切片的第二个参数,b不包含在切片中。
在序列中,索引不仅可以从左往右编号,还可以从右往左编号,负数代表从右往左编号。需要注意的是,从右往左编号是从-1开始的。例如:
动手练一练:
# 列表
a = [5, 6, 7, 8, 9]
print('列表')
print(a[-3:4]) # 输出 [7, 8]
print('------这是虚线------')
# 元组
b = (5, 6, 7, 8, 9)
print('元组')
print(b[-3:4]) # 输出 (7, 8)
print('------这还是虚线------')
# 字符串
c = "56789"
print('字符串')
print(c[-3:4]) # 输出 78
执行以上代码,输出结果为:
列表
[7, 8]
------这是虚线------
元组
(7, 8)
------这还是虚线------
字符串
78
上面例子中序列的索引方式如下表所示:
序列 | 5 | 6 | 7 | 8 | 9 | |
正索引 | 0 | 1 | 2 | 3 | 4 | |
负索引 | -5 | -4 | -3 | -2 | -1 |
在序列中,当序列的索引下标超出其真实的索引长度时,Python会自动将其截断到合法的范围内。例如,如果我们有一个长度为4的序列,但是我们却使用了索引范围为0~10的切片,Python会自动将其转换为范围为0~3的切片。这种行为不会报错,同时也很方便地允许我们处理一些不确定长度的数据。
动手练一练:
# 列表
a = [5, 6, 7, 8]
print('列表')
print(a[0:10]) # 输出 [5, 6, 7, 8]
print('------这是虚线------')
# 元组
b = (5, 6, 7, 8)
print('元组')
print(b[0:10]) # 输出 (5, 6, 7, 8)
print('------这还是虚线------')
# 字符串
c = "5678"
print('字符串')
print(c[0:10]) # 输出 5678
执行以上代码,输出结果为:
列表
[5, 6, 7, 8]
------这是虚线------
元组
(5, 6, 7, 8)
------这还是虚线------
字符串
5678
在所有的序列切片中,书写格式为:[第一个参数:第二个参数],使用冒号分隔两个参数,第一个参数也可以不指定,会默认为0,也就是从序列的开头进行切片。如果第二个参数不指定,则默认值是序列的最后(包含最后一个元素)。如果两个参数都设置为空,则可以获取整个序列,例如:
动手练一练:
# 列表
a = [5, 6, 7, 8]
print('列表')
print(a[2:]) # 输出[7, 8]
print(a[:2]) # 输出[5, 6]
print(a[:]) # 输出[5, 6, 7, 8]
print('------这是虚线------')
# 元组
b = (5, 6, 7, 8)
print('元组')
print(b[2:]) # 输出(7, 8)
print(b[:2]) # 输出(5, 6)
print(b[:]) # 输出(5, 6, 7, 8)
print('------这还是虚线------')
# 字符串
c = "5678"
print('字符串')
print(c[2:]) # 输出78
print(c[:2]) # 输出56
print(c[:]) # 输出5678
执行以上代码,输出结果为:
列表
[7, 8]
[5, 6]
[5, 6, 7, 8]
------这是虚线------
元组
(7, 8)
(5, 6)
(5, 6, 7, 8)
------这还是虚线------
字符串
78
56
5678