python中的切片

来源:互联网 发布:知乎 北京 裁缝店 编辑:程序博客网 时间:2024/06/05 05:46

现在有一个list

L=list(range(20))

如果想不用循环输出其中某一部分的数字,或者正序或者逆序,用切片实现就很方便。

切片的形式大概是这样[a:b:c] 其中c的正负用来控制遍历方向,如果是正数则顺序遍历,如果是负数则逆向遍历。此外,c的值还可以用来指定遍历的跨度,也就是一次向前或者是向后移动几个单位。

带负数的遍历范围转换成正数,只要把数组大小加上这个负数就对了
比如

l=list(range(20))print (l[2:-1])print (l[2:19)

二者输出结果一样

见如下代码:

#!/usr/bin/env python3# -*- coding: utf-8 -*-L=list(range(20))print (L[4:10])   #取4到10之间的元素print (L[0:10])   #取前十个元素print (L[:10])    #取前十个元素print (L[0:15:3]) #取前十五个元素,每隔3个元素print (L[:15:3])  #取前十五个元素,每隔3个元素print (L[0:-10])  #$还是取前十个print (L[-10:0])  #啥也没有print (L[-10:-1]) #10到18print (L[-10:])   #10到19print (L[-10:-1:2])#10到18,每隔两个输出print (L[-10::2])  #10到19每隔两个输出print (L[10::-1])  #输出10到0print (L[10:4:-1]) #10到5print (L[10:2:-2]) #10到3 每隔两个输出print (L[-1:-10:-2])#19到11 每隔两个输出

下面这段解释是从廖雪峰老师博客的评论区里面复制下来的~

a[start:end:step] # start through not past end, by step

The key point to remember is that:
the :end value represents the first value that is not in the selected slice.

上面是stackoverflow上的答案。
end是不包含在slice中的。对于strat和end数字同号的情况来说,输出的元素为|end-start|个(if(step)=1).如果它们异号,切片元素个数为n-|strat|-|end| (if(step)=1)

l=[1,2,3,4,5]l[1:3] #输出是[2,3]l[3:1:-1] #输出[4,3]l[-3:-1] #输出[3,4]l[-1:-3:-1] #输出[5,4]l[2:-1] #输出[3,4]l[-1:2:-1] #输出[5,4]

可见,end都是不会输出的。还有一点要注意正数,以0开始,倒着数以-1开始。

同样,step不是1或者-1的,从第一个开始数,隔step个,得到一个切片,直到end就停下来。还是不包括end

l[1:4:2] #[2,4]l[1:4:3] #[2]
0 0
原创粉丝点击