Python中列表执行x[-1:-4]切片返回空方括号[]的原因是什么
Python列表负索引切片返回空列表的原因
问题复现代码
x = [65,78,99,43,23,45,87,96,33,42] print(x[0:4]) # 输出:[65, 78, 99, 43] print(x[-1:-4]) # 输出:[]
核心原因
Python列表切片的完整语法为list[start:end:step],执行逻辑遵循3个固定规则:
- 未手动指定
step(步长)参数时,默认步长为1 - 切片遵循左闭右开原则:返回结果包含
start(起始索引)位置的元素,不包含end(结束索引)位置的元素 - 取值方向由步长正负决定:步长为正时,从起始索引开始沿索引递增(从左到右)的方向取元素;步长为负时,沿索引递减(从右到左)的方向取元素。如果沿步长指定的方向,无法从起始索引走到结束索引,切片会直接返回空列表。
两个切片的执行逻辑对比
- 对于
x[0:4]:起始索引为0,结束索引为4,默认步长1,取值方向从左到右。从索引0开始依次取索引0、1、2、3位置的元素,到索引4位置停止,最终得到结果[65, 78, 99, 43],符合预期。 - 对于
x[-1:-4]:Python支持负索引计数,-1对应列表最后一个元素(值为42,换算为正索引是9),-4对应列表倒数第四个元素(值为87,换算为正索引是6)。该切片未指定步长,默认步长为1,取值方向为从左到右,但起始索引9在结束索引6的右侧,沿从左到右的方向永远无法从索引9抵达索引6,没有符合条件的元素可取,因此返回空列表[]。
如果需要从右往左取该区间的元素,只需要显式将步长设为-1,写法为x[-1:-4:-1],执行后可得到结果[42, 33, 96]。
内容的提问来源于stack exchange,提问作者Eshika Shah
相关产品推荐
相关产品推荐

