您的位置:首页 > 编程语言 > Python开发

python中的切片

2016-01-01 21:54 656 查看
现在有一个list

[code]L=list(range(20))


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

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

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

比如

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


二者输出结果一样

见如下代码:

[code]#!/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到18
print (L[-10:])   #10到19
print (L[-10:-1:2])#10到18,每隔两个输出
print (L[-10::2])  #10到19每隔两个输出
print (L[10::-1])  #输出10到0
print (L[10:4:-1]) #10到5
print (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)

[code]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

[code]l[1:4:2] #[2,4]
l[1:4:3] #[2]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: