一、是什么
较为官方的说法:切片是指对操作的对象截取其中一部分的操作
通俗来说:一种能够从数据中取到一部分数据的方式
例如,
有一个字符串"abcdef"
,我们可以通过切片取到"cde"
切片不仅可以在字符串中应用,还可以对列表、元组等进行操作,简言之“切片”功能很重要。
本节课我们以字符串为例讲解“切片”
二、怎样用
1. 语法
[起始:结束:步长]
注意
- 选取的区间从"起始"位开始,到"结束"位的前一位结束(不包含结束位本身),步长表示选取间隔
- 默认“步长”为1,即取完一个下标的数据之后,第二个下标的是在刚刚下标基础上+1
- 步长为正数,表示从左向右取数据
- 步长为负数,表示从右向左取数据
2. 示例
demo1
name = 'abcdef' print(name[0:3]) # 取下标为0、1、2的字符,注意取不到下标为3的空间
运行结果:
abc
说明:
demo2
name = 'abcdef' print(name[:3]) # 取下标为0、1、2的字符,注意取不到下标为3的空间
运行结果:
abc
说明:
demo3
name = 'abcdef' print(name[3:5]) # 取 下标为3、4 的字符
运行结果:
de
说明
demo4
name = 'abcdef' print(name[2:]) # 取 下标为2开始到最后的字符
运行结果:
cdef
说明:当没有写截至下标时,默认到最后(包含)
demo5
name = 'abcdef' print(name[1:-1]) # 取 下标为1开始 到 右侧第2个字符 之间的所有字符
运行结果:
bcde
说明:
demo6
name = 'abcdef' print(name[1:5:2])
运行结果:
bd
说明:
demo7
name = 'abcdef' print(name[5:1:-1])
运行结果:
fedc
说明
demo8
name = 'abcdef' print(name[5:1:-2])
运行结果:
fd
说明
demo9
name = 'abcdef' print(name[::1])
运行结果:
abcdef
说明
demo10
name = 'abcdef' print(name[::])
运行结果:
abcdef
说明:
- 开始位置、结束位置都未指定,且步长也未指定那么步长用默认的1,则此时从最左取到最右
demo11
name = 'abcdef' print(name[::-1])
运行结果:
fedcba
说明:
- 开始位置、结束位置都未指定,步长为
-1
,此时从最右取到最左
demo12
name = 'abcdef' print(name[::-2])
运行结果:
fdb
说明
- 开始、结束位置都未指定,且步长是
-2
,那么就意味着从右侧往左取数据,且步子长度为2(即隔一个取一个)
三、练习
给定一个字符串s
, 请反转字符串
s = 'Hello World!' print(s[4]) print(s) print(s[:]) # 取出所有元素(没有起始位和结束位之分),默认步长为1 print(s[1:]) # 从下标为1开始,取出 后面所有的元素(没有结束位) print(s[:5]) # 从起始位置开始,取到 下标为5的前一个元素(不包括结束位本身) print(s[:-1]) # 从起始位置开始,取到 倒数第一个元素(不包括结束位本身) print(s[-4:-1]) # 从倒数第4个元素开始,取到 倒数第1个元素(不包括结束位本身) print(s[1:5:2]) # 从下标为1开始,取到下标为5的前一个元素,步长为2(不包括结束位本身) # python 字符串快速逆序 print(s[::-1]) # 从后向前,按步长为1进行取值
四、总结
- 切片使用规则中,要么一个冒号
[开始位置:结束位置]
,要么两个冒号[开始位置:结束位置:步长]
- 不写步长时,默认为1
- 步长为正数,表示从左向右取数据
- 步长为负数,表示从右向左取数据
- 当开始位置、结束位置都没有设定时,要看步长,如果步长为正数此时开始位置理解为最左 结束位置为最右,如果步长为负数此时开始位置理解为最右 结束位置为最左