这一篇文是第一次学习Python高级特性 叫切片(Slice) ,可以对list、tuple、字符串进行截取操作
可以通过一个list 如下:
>>> L = ['zhangsan','lisi','wangwu','Core','Wei']
如果我们要取前三个元素我们会怎么取呢?
使用最原始的方法就是
>>>if __name__ == '__main__':
>>>print(L[0],L[1],L[2])
['zhangsan','lisi','wangwu']
我们可以拓展一下,如果是要去取N个元素上面的方法不合适
可以用循环来取前N个元素, 也就是索引为0-(N-1)的元素
>>>r = []
>>>n = 3
>>>for i in range(n):
... r.append(L[i])
>>>print(r)
['zhangsan','lisi','wangwu']
对取指定索引范围的操作,用循环步骤比较繁琐,Python也不是吃素的也提供了今天标题 切片(Slice) 操作符
对应之前的也是去前三个元素 并且一行代码搞掂:
>>>L[0:3]
['zhangsan','lisi','wangwu']
OMG 这也太简单了吧, L[0:3] 表示,从索引0开始取,直到索引3但不包括3.即0,1,2三个元素
如果第一个索引是0的话,还可以省略
>>>L[:3]
也可以从索引1开始,取3个个元素
>>>L[1:4]
['lisi','wangwu','Core']
Python还支持取倒数第几个元素,倒数切片也同样支持
>>>L[-2:0]
['Core','Wei']
>>>L[-2:-1]
['Core']
切片还有其他有用的操作,我们先创建一个0-99的数列:
>>>L = list(range(100))
可以通过切片轻松取出某一段数列。如前10个数
>>>L[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
后10个数
>>>L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
前11-20个数
>>>L[10:20]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
前10个数,每两个取一个
>>>L[:10:2]
[0, 2, 4, 6, 8]
所有数,每5个取1个
>>>L[::5]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
只是写了个[:]就可以复制原样一个list
>>>L[:]
[0, 1, 2, 3, ..., 99]
tuple也是一种list,唯一区别是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
(0,1,2,3,4,5,)[:3]
(0,1,2)
Python的可切片对象的索引方式
包括:正索引和负索引两部分,以a=[0,1,2,3,4,5,6,7,8,9]为例子
正索引 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
---|---|---|---|---|---|---|---|---|---|---|
负索引 | -10 | -9 | -8 | -7 | -6 | -5 | -4 | -3 | -2 | -1 |
值 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |