为何未指定step参数时Python字符串切片返回空值?
Python字符串切片默认step返回空的原因
先明确Python切片的核心规则:
- 切片语法为
[start:end:step],默认step=1,此时切片从左往右遍历,要求start对应的位置必须在end对应的位置左侧(正索引数值更小),否则返回空字符串。 - 当
step为负数时,切片方向变为从右往左,此时要求start对应的位置必须在end对应的位置右侧(正索引数值更大),才能取出元素。
结合你用的字符串word = 'fabricated',先把字符与索引的对应关系列出来:
正索引:0:f, 1:a, 2:b, 3:r, 4:i, 5:c, 6:a, 7:t, 8:e, 9:d 负索引:-10:f, -9:a, -8:b, -7:r, -6:i, -5:c, -4:a, -3:t, -2:e, -1:d
逐个分析你的切片操作:
word[5:-8]start=5对应字符'c',end=-8对应字符'b'(正索引为2)- 默认
step=1,从左往右取,但正索引5 > 2,start在end的右侧,没有符合遍历方向的元素,所以返回空字符串。
word[-3:-9]start=-3对应字符't'(正索引7),end=-9对应字符'a'(正索引1)- 默认
step=1,正索引7 > 1,start在end右侧,同样没有元素可提取,返回空。
当你指定step=-1时,切片方向反转:
word[5:-8:-1]:从索引5('c')往回遍历,直到end=-8(正索引2)的前一个位置,取出索引5、4、3对应的字符'c'、'i'、'r',得到'cir'。word[-3:-9:-1]:从索引-3(正索引7,'t')往回遍历,直到end=-9(正索引1)的前一个位置,取出索引7、6、5、4、3、2对应的字符't'、'a'、'c'、'i'、'r'、'b',得到'tacirb'。
内容的提问来源于stack exchange,提问作者Popsicle
相关产品推荐
相关产品推荐

