Python列表切片[0:last_Before:-1]输出空列表的原因是什么
Python列表负步长切片返回空列表问题解答
首先明确Python列表切片[start:end:step]的核心规则:
- 当
step为正数时,切片从左往右遍历,要求start位置在end位置左侧才能返回非空结果 - 当
step为负数时,切片从右往左遍历,要求start位置在end位置右侧才能返回非空结果
你遇到的问题原因如下:
原写法input_list[: last_Before: -1]可以正常输出的原因
当start参数留空、且步长为负时,start默认取列表最后一个元素的索引(即len(input_list)-1),这个位置天然在last_Before的右侧,所以从末尾往左遍历到last_Before前一个位置时,可以拿到符合要求的元素。
改后写法input_list[0: last_Before: -1]返回空列表的原因
你手动将start设置为0(列表第一个元素的索引),此时步长为-1需要往左遍历,但last_Before的取值是list_Length - 2,只要list_Length >= 2,last_Before就大于等于0,也就是start=0的位置在end=last_Before的左侧,从0往左遍历永远碰不到终止位置last_Before,所以最终返回空列表。
示例验证
我们以实际运行场景举例:
假设你输入list_Length=3,后续依次输入a、b、c三个值,此时:
last_Before = 3-2 = 1- 最终
input_list = [1,2,3,4,5,6,'a','b','c'],索引范围是0~8- 原写法
[:1:-1]:start默认是8,从8往左遍历到索引1之前停止,输出结果为['c', 'b', 'a', 6, 5, 4, 3] - 改后写法
[0:1:-1]:start是0,往左遍历下一个索引是-1,超出列表范围,没有命中任何元素,返回空列表[]
- 原写法
内容的提问来源于stack exchange,提问作者Villicus
相关产品推荐
相关产品推荐

