为何Python列表切片l[0:-1:-1]返回空列表而非[1]?
理解Python切片的反向遍历逻辑
首先明确Python切片的完整语法是 seq[start:stop:step],其中三个参数的核心规则分两种情况:
- 当
step为正数时:从start出发,向索引增大的方向遍历,直到位置超过stop就停止,且结果不包含stop对应的元素。 - 当
step为负数时:从start出发,向索引减小的方向遍历,直到位置低于stop就停止,且结果不包含stop对应的元素。
回到你的代码:
l = [1,2,3] print(l[0:-1:-1])
这里的参数对应:
start=0(对应元素1)stop=-1:在Python中,负数索引从列表末尾倒着数,-1对应列表最后一个元素的索引2(元素3)step=-1:表示反向遍历(索引从大到小)
因为step是负的,遍历方向是从0往索引更小的方向走,但列表的最小索引就是0,而stop=2比start=0大——这意味着遍历一开始就没有元素可以取(还没开始走就已经越过了stop的位置),所以返回空列表[]。
如果你的目标是通过切片得到[1],可以用l[0::-1],这个写法省略了stop参数(默认是None,对应反向遍历时列表开头之前的位置),会从索引0开始反向遍历到列表开头,最终返回[1]。当然如果只是取单个元素,直接用l[0]更直观。
内容的提问来源于stack exchange,提问作者Boooooo
相关产品推荐
相关产品推荐

