在前几篇文章中我提过切片的用法,今天详细来聊下Python中的切片,名字看起来难以理解,别慌!我的理解切片就是截取序列中元素的一种方式;所谓的序列就是有顺序的列表,如:字符串str、列表list、元组tuple都是序列:
eg:
list = [1,2,3]
print(list[0]) # 1
上边代码,获取了list列表中第一个元素,如果我们想获取列表中后两位元素怎么办呢?
切片就上场了:
切片基本用法
list = [1,2,3]
print(list[1:3]) # [2,3]
print(type(list[1:3])) # 类型是list列表 <class 'list'>
上边代码,[ 1:3 ] 的意思是从索引1开始截取,一直截取到列表中的索引3( 1和3都是列表list中的索引 ),切片永远符合左闭右开的原则,也就是左边的能取到,右边的取不到,所以要截取到的索引为3,当然只要写比2大的数都可以(与range函数里边两个参数的情况相同,都是左闭右开)
简写
情况一:如果从某个索引开始一直截取到最后,冒号后边的索引可以去掉:
list = [1,2,3]
print(list[1:]) # [2,3]
情况二:如果从索引0开始截取,0可以省略:
list = [1,2,3,4,5]
print(list[:2]) # [1,2]
情况三:如果从0开始,截取到最后,前后索引都可以省略,等于复制了一个list列表
list = [1,2,3,4,5]
print(list[:]) # [1,2,3,4,5]
倒数切片
Python中也可以倒着截取元素,
list = [1,2,3,4,5]
print(list[-1:]) # [5] 从倒数第一位开始,一直截取到最后
print(list[-3:]) # [3,4,5] 从倒数第三个元素开始,截取到最后
print(list[-3:-1]) # [3,4] 从倒数第三个元素开始,截取到倒数第一位(不包含倒数第一位)
上边代码,倒着切片时注意,冒号前后的数不是索引了,也就是什么数就从第几位开始截取,当然还是符合左闭右开的原则,冒号左边的能取到,冒号后边的取不到!!!
有步长的切片
有步长的切片是指两个冒号情况,最后冒号右边代表步长
list = list(range(10)) #[0,1,2,3,4,5,6,7,8,9]
print(list[::2]) # [0,2,4,6,8]
上边代码,我们通过range函数生成0~9的整数,然后用list函数生成一个list列表 ; 第一个冒号前后没有索引,表示从0一直截取到最后,第二个冒号后边的2代表每次截取时的步长 。(与range函数三个参数情况相同)
在来看个例子:
list = list(range(10))
print(list[1::2]) # [1,3,5,7,9]
上班代码,从1开始截取,一直截取到最后,步长是2。
当然了,字符串、元组也能使用切片来截取里边的元素,在这里就不一一举例了,大家自己写写!
最后再来一个demo:
实现一个trim()函数,就是去除字符串前后空格:
str = " hello "
newStr = str[1:len(str)-1]
if newStr == 'hello':
print("已去掉前后空格") # 已去掉前后空格
总结下:在python中,切片可以实现许多循环可以实现的操作,以后我会不断的更新,有不足之处,希望指出!
2019/9/11 ——补充:
可以使用切片来逆序字符串 或者 列表 或元组:
l = [1,2,3,4]
s = 'abc'
t = (1,2,3)
print(l[::-1]) # [4, 3, 2, 1]
print(s[::-1]) # cba
print(t[::-1]) # (3, 2, 1)
2020/12/5 ——补充:
[::] 会生成新列表,且新生成的列表与原列表内存地址并不相同