python字符串和列表的切片
前言
对于字符串和列表python提供了以[ start : end : step ]直观方式来截取字符串和列表一部分,使用起来非常便利和直观。
1、切片字符串例子
# 定义一个字符串
str1 = 'hello world'
print(str1[0:5]) # str1[0:5]表示从str1截取从0、1、2、3、4位置的字符。
print(str1[6:]) # str1[6:]表示从str1截取从6位置起始所有字符。
# hello
# world
2、切片语法说明
在形式上,切片使用2个冒号分隔的3个数字来完成。
[start : end : step]
第一个数字 start表示切片开始位置,默认为0;
第二个数字 end 表示切片截止(但不包含)位置默认为列表长度;
第三个数字setp表示切片的步长(默认为1)。
当start为0时候可以省略,当end为列表长度是可以省略,当step为1可以省略,省略步长时还可以省略最后一个冒号。
当step为负数时,表示反向切片,这是start应该在end右侧才行。
start是起始位置(包括start位置)
end是结束位置(不包括end位置)
step是步长。
对照切片使用形式,我们要把握两个点:
- end是不包括所在索引号,[0:5]转换到数学可以看作[0,5)正整数集合范围表达,就是0,1,2,3,4。
- 注意不要被省略的形式迷惑。
3、列表切片例子演练
省略会让我们容易搞混,这里把省略和完整对比一下,加深切片语法形式。
list1 = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
# 1、切片语法是[start : end : step]
print(list1[::]) # ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
print(list1[:]) # ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
#list1[::]等同list1[:]等同list1
#2、这个不是切片操作,这个表示按索引号取值
#2、切片语法是[start : end : step] 再省略也得有:符号。
print(list1[1]) # shanghai
#3、省略end,end默认为列表长度值
print(list1[1:]) # ['shanghai', 'guangzhou', 'shenzhen']
print(list1[1::]) # ['shanghai', 'guangzhou', 'shenzhen']
#list1[1:]等同list1[1::]。
#3、省略start,start默认是0
print(list1[:1]) # ['beijing']
print(list1[:1:]) # ['beijing']
#list1[:1]等同list1[:1:]
#步长为2,第一个从0开始,0 2,第二从1开始1 3。
print(list1[::2]) # ['beijing', 'guangzhou']
print(list1[1::2]) # ['shanghai', 'shenzhen']
#从倒数三开始到倒数第二进行切片,步长为2
print(list1[-3:-1:2]) # ['shanghai']
总结
切片对于截取字符串和列表是便利,要记住三个点:
- 无论是字符串还是列表,起始位置都是0。
- start包含自己, end是不包含自己。
- 按照[start : end : step] 来套,就不会被省略搞混淆。