Python切片:[i:j]与[i:j:s]
原创
©著作权归作者所有:来自51CTO博客作者流动的风与雪的原创作品,请联系作者获取转载授权,否则将追究法律责任
第一部分
a[i:j]
的含义是将【a[i]到a[j-1]的元素】复制一遍,以生成一个切片,切片的数据类型与【被切片的对象】相同。
示例代码如下:
>>> list1 = [1, 2, 3, 4, 5]
>>> tuple1 = ('a', 'b', 'c', 'd', 'e')
>>> string1 = "abcde"
>>> print(list1[1:4])
[2, 3, 4]
>>> print(tuple1[1:4])
('b', 'c', 'd')
>>> print(string1[1:4])
bcd
第二部分
对于a[i:j]:当未指定i的值时,i默认为0;当未指定j的值时,j默认为len(a);当i与j均缺省时,即a[:]就相当于复制一份a。
示例代码如下:
>>> list1 = [1, 2, 3, 4, 5]
>>> list1[:3] # 相当于list1[0:3]
[1, 2, 3]
>>> list1[3:] # 相当于list1[3:5]
[4, 5]
>>> list1[:] # 相当于list1[0:5],相当于a的副本
[1, 2, 3, 4, 5]
第三部分
a[i:j:s]
中,i与j和上面所讲的用法一样;而s表示步长,默认值为1。a[i:j:1]相当于a[i:j]。
(这里是我最难以理解的部分,所以重点加粗)当步长s<0:i缺省时默认为-1,j缺省时默认为-(len(a)+1)。a[::-1]相当于a[-1:-len(a)-1:-1],这样是从最后一个元素反过来到第一个元素复制一次,说白了就是倒序输出元素。
示例代码如下:
>>> list1 = [1, 2, 3, 4, 5]
>>> list1[::-1] # list1的元素倒序
[5, 4, 3, 2, 1]
>>> list1[::-2] # 隔一个元素输出
[5, 3, 1]