Python切片代码为何输出空字符串?何时会出现该情况?
Python切片产生空字符串的情况及原因分析
先看你的代码:
xs = "0123456789" x = xs[4:-5:-1] print(x) # 输出空字符串
要搞懂为什么会得到空字符串,得先理清Python序列切片的核心规则:
切片语法是[start:stop:step],三个参数的逻辑如下:
start:切片的起始位置,包含该位置的元素stop:切片的结束位置,不包含该位置的元素step:步长,正数表示从左往右遍历,负数表示从右往左遍历
关键在于步长正负对应的遍历方向和起止位置的关系:
- 当
step > 0时,必须start的索引小于stop的索引,才能取到元素;如果start >= stop,结果就是空字符串。 - 当
step < 0时,必须start的索引大于stop的索引,才能取到元素;如果start <= stop,结果就是空字符串。
回到你的例子,具体拆解:
- 先把负索引转成正索引:
xs的长度是10,负索引-5等价于10 - 5 = 5,所以xs[4:-5:-1]等价于xs[4:5:-1]。 - 这里
start=4,stop=5,step=-1(负步长,要从右往左遍历)。但4的索引小于5的索引,不满足负步长所需的start > stop条件,所以遍历根本不会执行,结果就是空字符串。
总结一下产生空字符串的场景:
- 正步长(从左往右取)时,起始索引大于等于结束索引;
- 负步长(从右往左取)时,起始索引小于等于结束索引。
内容的提问来源于stack exchange,提问作者Jacob Raymond
相关产品推荐
相关产品推荐

