Python3之切片及内置切片函数slice
转自:https://www.cnblogs.com/minseo/p/11113638.html 博主:minseo
切片
取一个list或tuple的部分元素是非常常见的操作。比如,一个list
1
|
L = [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] |
取前3个元素,应该怎么做
笨方法,一个个列出来
1
2
|
>>> [L[ 0 ],L[ 1 ],L[ 2 ]] [ 0 , 1 , 2 ] |
假如需要列出N个但是N很大
循环方法
1
2
3
4
5
6
7
|
>>> r = [] >>> n = 3 >>> for i in range (n): ... r.append(L[i]) ... >>> r [ 0 , 1 , 2 ] |
对于经常去指定索引范围的操作,用循环十分繁琐,因此pythone提供了切片操作符能大大简化操作
1
2
|
>>> L[ 0 : 3 ] [ 0 , 1 , 2 ] |
L[0:3]表示,从索引0开始,直到索引3,但是不包含索引3,及索引0,1,2 一共3个元素
如果第一个索引为0可以省略
1
2
|
>>> L[: 3 ] [ 0 , 1 , 2 ] |
也可以从索引1开始,取出2个元素来
1
2
|
>>> L[ 1 : 3 ] [ 1 , 2 ] |
类似也可以倒数切片,-1代表倒数第1个索引
1
2
3
4
|
>>> L[ - 2 :] [ 8 , 9 ] >>> L[ - 2 : - 1 ] [ 8 ] |
默认取的间隔是1也可以定义,隔几个去一个
从索引0取到索引9没隔两个取一个
1
2
|
>>> L[ 0 : 10 : 2 ] [ 0 , 2 , 4 , 6 , 8 ] |
什么都不写,只写[:]就可以原样复制一个list
1
2
|
>>> L[:] [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] |
tuple也是一个list,唯一区别是tuple不可变.tuple切片也是一个tuple
1
2
|
>>> ( 0 , 1 , 2 , 3 , 4 , 5 )[: 3 ] ( 0 , 1 , 2 ) |
字符串'xxx'也是可以看成是一种list,也可以切片返回的是一个字符
1
2
|
>>> 'abcde' [: 3 ] 'abc' |
切片函数slice
语法
1
2
|
class slice (stop) class slice (start, stop[, step]) |
参数说明
1
2
3
|
start - - 起始位置 默认为 None stop - - 结束位置 自定义 step - - 间距 默认为 None 间距为 1 |
1
2
3
4
5
6
7
8
9
10
11
|
>>> myslice = slice ( 3 ) >>> myslice slice ( None , 3 , None ) >>> L[myslice] [ 0 , 1 , 2 ] >>> print (myslice.start) None >>> print (myslice.step) None >>> print (myslice.stop) 3 |
以上
1
2
3
|
myslice = ( 3 ) 等价于 myslice = slice ( 0 , 3 , 1 ) |
自定义间隔step
1
2
3
4
5
6
7
|
#切片范围为0-10 间距为2 >>> myslice = slice ( 0 , 10 , 2 ) #查看参数 >>> myslice slice ( 0 , 10 , 2 ) >>> L[myslice] [ 0 , 2 , 4 , 6 , 8 ] |