1.为什么要学习切片【切片是解决何种问题的?】
(2)对于含有元素很少的list,我们遍历其前三个元素,通常可以这样来实现:
#遍历list,取其中索引为【0】、【1】、【2】的元素: L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang'] a = [L[0],L[1],L[2]] print(a)
------------------------------------------------------------------
#运行结果:
['Xiaoming','Xiaohong','Xiaolan']
(2)显然上述方法,对于取前N(若N很大)个元素的list来说,是比较麻烦的,可以通过循环来进行遍历:
#使用循环遍历前3个元素: L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang'] r = [] n = 3 for i in range(n): r.append(L[i]) print(r) ---------------------------------------------------------------------------------------- #打印结果: ['Xiaoming','Xiaohong','Xiaolan']
虽然这种方法较第一种比较好了,但是对于经常取指定索引的操作,循环还是有点繁琐,因此python提供了切片(slice)操作符
2.切片操作符解读
#切片操作符的使用: L = ['Xiaoming','Xiaohong','Xiaolan','Xiaowang','Xiaozhang'] print(L[0:3]) ---------------------------------------------------------------------- #运行结果: ['Xiaoming','Xiaohong','Xiaolan'] ---------------------------------------------------------------------- #含义解读: L[0:3]:表示从索引0开始,到索引3为止,但不包括索引3,也就是取索引[0] [1] [2] L[:3]:若第一个索引是[0],可以省略 L[1:3]:从索引1开始取2个元素 #切片还可以从倒数的位置开始取,记住倒数第一的数的索引位置是-1,例如: L[-2:]:取倒数两个元素 L[-1:]:取倒数第一个元素 L[-2:-1]:取倒数第一个元素 ------------------------------------------------------------------------ #间隔取: #!/usr/bin/env python3 # -*- coding: utf-8 -*- #创建一个0-99的数列 L = list(range(100)) #取前10个数: print( L[:10] ) ---->[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] #取后10个数: print( L[-10:] )
---->[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
#取前11-20个数字: print( L[10:20] ) ---->[10, 11, 12, 13, 14, 15, 16, 17, 18, 19] #取前10数,每两个取一个: print( L[:10:2] ) ---->[0, 2, 4, 6, 8]
#所有数,每五个取一个: print( L[::5] ) ---->[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
#只写[:]就是原样复制一个list: print( L[:] )
3.其他知识
(1)字符串'xxxx'也可以看成一种list,每个元素就是一个字符,可以用切片操作,操作结果认为字符串:
#对字符串进行切片操作,取前三个字母 a = 'abcdefg'[:3] print(a) #运行结果【仍为字符串】 ---->abc
(2)tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
#对tuple进行切片操作 t = (0,1,2,3,4,5,6,7,8)[:4] print(t) #运行结果: ---->(1,2,3,4)
4.练习【利用切片操作,实现一个trim()函数,去除字符串首尾的空格】
思路:有以下几种情况:
(1)空字符串 、(2)首尾均无空格:通过if进行匹配并返回字符串本身:
if(s == '' or (s[0:1]!=' ' and s[-1:]!=' ')): #判断是否是(1) (2)情况,若是返回本身 return s
(3)字符串段首有空格:
elif s[0:1]==' ':#判断是否属于(3)情况,若是利用迭代,逐一切片 return trim(s[1:])
(4)字符串段尾有空格:
else : #判断是否属于(4)情况,若是利用迭代,逐一切片 return trim(s[:-1] )
(5)首尾均有空格:先匹配情况(3)、然后匹配情况(4)
完整代码:
#!/usr/bin/env python3 # -*- coding: utf-8 -*- def trim(s): if(s == '' or (s[0:1]!=' ' and s[-1:]!=' ')): #判断是否是(1) (2)情况,若是返回本身 return s elif s[0:1]==' ':#判断是否属于(3)情况,若是利用迭代,逐一切片 return trim(s[1:]) else : #判断是否属于(4)情况,若是利用迭代,逐一切片 return trim(s[:-1] ) a = trim('') b = trim('wang') c = trim(' wang') d = trim('wang ') e = trim(' wang ') f = trim(' ') print('a=',a) print('b=',b) print('c=',c) print('d=',d) print('e=',e) print('f=',f) ------------------------------------------------------------------------------- #运行结果: ---->a= ---->b= wang ---->c= wang ---->d= wang ---->e= wang ---->f=