python中的切片

现在有一个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到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)

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值