python之切片

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= 

 

posted @ 2018-01-19 14:42  woft王  阅读(518)  评论(0)    收藏  举报