关于python:如果list[j]在list[i]之前,list[i:j]是否保证是空的list?

Is list[i:j] guaranteed to be an empty list if list[j] precedes list[i]?

Python教程解释了索引为负时的切片行为,但我找不到描述结束索引位于开始索引之前行为的文档。(我也看过解释python的slice符号,也许我读得不够仔细,但是这里的答案似乎没有解决这一点。)

我观察到的行为是返回一个空列表,这对我来说似乎是合理的。然而,对于我来说,以相反的顺序返回ij之间的项目列表,或者简单地提出一个例外,这似乎也是合理的。

如果list[j]先于list[i],那么list[i:j]是否保证为空列表?


是的,如果j <= i为真,那么对于标准的python类型,得到的切片是空的。要获得相反顺序的结果,您需要添加一个负步幅:

1
list[i:j:-1]

因为显式比隐式好。

这一点记录在通用顺序操作中,脚注4:

The slice of s from i to j is defined as the sequence of items with index k such that i <= k < j. If i or j is greater than len(s), use len(s). If i is omitted or None, use 0. If j is omitted or None, use len(s). If i is greater than or equal to j, the slice is empty.

大胆强调我的。

自定义类型可以自由地以不同的方式解释这一点。