为何Python的slice()在起始索引负、终止索引正时无效,反之却可行?
Python slice() 反向切片无输出的原因解析
先看你给出的有效切片场景:slice(12, -4)能正确提取网站名称,是因为这个切片的起始索引12在结束索引-4的左侧(对应字符串从左到右的位置),且默认步长step=1(从左往右遍历),所以能正常截取中间的内容。
而slice(-4, 5)没有输出,核心是Python切片的默认规则在起作用:
- 切片完整格式是
slice(start, end, step),默认step=1(正数代表从左往右遍历) - 当
step为正数时,必须满足start对应的实际索引位置 ≤ end对应的实际索引位置,才能截取到内容;如果start的位置在end的右侧(实际索引值更大),切片会直接返回空序列
以website1 = "https://www.google.com"为例:
-4对应的实际索引是len(website1)-4 = 20-4=16,指向.com中的.5对应的实际索引是5,指向字符串里的:- 此时
16 > 5,且step=1是从左往右遍历,自然没法从索引16往索引5的方向截取,结果为空
如果想要得到类似.comhttps的内容,不需要用反向切片,直接拼接两部分即可:
website1 = "https://www.google.com" # 取最后4个字符 + 取前5个字符 result = website1[-4:] + website1[:5] print(result) # 输出 .comhttps
如果一定要用带步长的反向切片实现倒序截取逻辑,需要把step设为负数(代表从右往左遍历),同时调整start和end的顺序(此时start要在end的右侧)。比如从倒数第4位往左截取到开头:
slice_reverse = slice(-4, None, -1) print(website1[slice_reverse]) # 输出 .googllewww:://shtt
这个结果是从.开始往左倒着取整个字符串的内容,和你预期的.comhttps不同,所以直接拼接是更直观的方式。
内容的提问来源于stack exchange,提问作者Jorgityo
相关产品推荐
相关产品推荐

