如何理解python中a[x:y:z]的xyz

如何理解python中a[x:y:z]的xyz

总有初学者搞得比较晕

给出一个字符串示例,不是数组。不求完美,只求对初学者有所帮助,能了解少少,即达目的。

a='ABCDEFGHI'

为了方便说明问题,假定字符串a=‘ABCDEFGHI’,长度len(a)=9。
有以下几点说明,应该能理解了,如果有说错,请自己验证。

  1. a[x:y:z]中,x和y都是索引,z表示取出字符后,再以z为间隔进行二次筛选,z表示:后字符的索引减前字符的索引的差值,z留空时相当于z=1。
  2. 一个字符串有两套索引。索引为正数时,表示正索引,初始索引0在字符串的最左边。索引为负数时,表示负索引,初始索引-1在字符串的最右边。
  3. 两套索引可以混合使用,关键在于“索引所指向的字符在哪里”,不要被数值大小迷惑。
  4. 不管用哪一套索引,取字符时,都是从左往右取,a[前索引:后索引]中,后索引所指的字符必须在前索引所指字符的右边,否则取不出结果。
  5. python中的[ ]表示“含左不含右”又称“左闭右开”(与数学的符号不同),故a[x:x]总是空值、a[-x:len(a)-x]也为空(式中x是正数),因为都指向字符自身,却又不包含自身。
  6. a[x:y:z]中,x和y可以留空不写,表示该位置不视为索引,只论字符。x留空时表示取到最左的字符,y留空表示取得最右的字符,注意[ ]依然是左闭右开的。
  7. x、y、z的值可以超过len(a),即使索引不存在时,python也不会报错,这跟数组索引是不一样的!数组超索引的话会报错的。

看下图,可以一目了然两套索引所指:

正索引  0   1   2   3   4   5   6   7   8
字符串  A   B   C   D   E   F   G   H   I
负索引  -9  -8  -7  -6  -5  -4  -3  -2  -1

举例:

a[-9:0]=空值,前述第45点。
a[0]=a[-9]=a[-8:2]=a[-9:1]=a[0:-8]='A'
a[-6,2]=空值,前述第4点。
a[2:-6]=a[-7:3]='C'
a[8]=a[8:9]=a[8:]=a[-1:]='I',前述第6点
a[:-1]=a[-999:-1]='ABCDEFGH',前述第7点
a[0:9]=a[-0:9]=a[0:]=a[-0:]='ABCDEFGHI'
a[:0]=a[:-9]=a[9:]=空值,前述第6点
a[2:7]='CDEFG'
a[2:7:2]='CEG'
a[2:7:3]='CF',C的索引是22+3=5(即F的索引)
  • 当字符串长度不固定时,只想取后面的m个字符,应该用负索引,即a[-m:],这应该是最优写法了。
  • 当字符串长度不固定时,只想取前面的m个字符,应该用正索引,即a[:m],注意不是a[:m+1],因为正索引是从0开始的。
  • 想取中间m到n位置的字符,这里m和n指字符位置,要转换为索引,即a[m-1:n],因为索引从0开始,且[ ]左闭右开

…………

可以用以下代码块来尝试看看结果:

a='ABCDEFGHI'
for i in range(-len(a),len(a)+1):
    for j in range(-len(a),len(a)+1):
        print('a[',i,':',j,']=',a[i:j])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值