Python字符串切片[2:12:-1]返回空值的原因及底层逻辑咨询
Python负步长切片返回空的底层逻辑
首先明确Python序列(字符串、列表、元组均适用)的切片语法[start:end:step]的核心规则:
- step为正数时,遍历方向是从左到右,只有
start的索引值小于end的索引值,才能返回非空结果,否则返回空 - step为负数时,遍历方向是从右到左,只有
start的索引值大于end的索引值,才能返回非空结果,否则返回空 - 所有切片都遵循「左闭右开」原则:结果包含
start对应位置的元素,不包含end对应位置的元素
很多新手存在的误区是:认为[a:b:-1]是先截取[a:b]的片段再反转,这是完全错误的,step的符号会优先决定遍历方向,三个参数是共同决定遍历范围的。
对应你的代码分析:
你第三行的代码是_teststr[2:12:-1]:
- step=-1,遍历方向是从右往左
- start值为2,end值为12,索引2的位置在索引12的左侧
- 从索引2的位置往左边遍历,永远无法到达索引12的位置,所以直接返回空字符串。
如果你想要得到预期的uoode(也就是_teststr[2:12:2]的反转结果),可以用两种方式实现:
- 先截取指定步长的片段再反转:
_teststr[2:12:2][::-1] - 直接符合负步长规则写切片:
_teststr[10:1:-2](_teststr[2:12:2]实际取的是索引2、4、6、8、10的元素,反向遍历时start设为10,end设为1保证能取到索引2,步长设为-2即可)
内容的提问来源于stack exchange,提问作者Project 9
相关产品推荐
相关产品推荐

