如果 list[j] 在 list[i] 之前,list[i:j] 是否保证为空列表?
Is list[i:j] guaranteed to be an empty list if list[j] precedes list[i]?
The Python tutorial explains slice behavior when indices are negative, but I can't find documentation describing the behavior when the end index precedes the start index. (I've also looked at Explain Python's slice notation,可能是我看得不够仔细,但是那里的答案似乎没有解决这一点。)
我观察到的行为是 returned 一个空列表,这对我来说似乎是合理的。但是,对我来说,return i
和 j
之间的项目列表以相反的顺序或简单地引发异常也是合理的。
如果 list[j]
在 list[i]
之前,list[i:j]
是否保证为空列表?
是的,如果 j <= i
为真,对于 标准 Python 类型 ,结果切片为空。要得到倒序的结果,需要加负步幅:
list[i:j:-1]
因为显式优于隐式。
这记录在 Common Sequence Operations,脚注 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.
大胆强调我的。
自定义类型可以自由地对此进行不同的解释。
The Python tutorial explains slice behavior when indices are negative, but I can't find documentation describing the behavior when the end index precedes the start index. (I've also looked at Explain Python's slice notation,可能是我看得不够仔细,但是那里的答案似乎没有解决这一点。)
我观察到的行为是 returned 一个空列表,这对我来说似乎是合理的。但是,对我来说,return i
和 j
之间的项目列表以相反的顺序或简单地引发异常也是合理的。
如果 list[j]
在 list[i]
之前,list[i:j]
是否保证为空列表?
是的,如果 j <= i
为真,对于 标准 Python 类型 ,结果切片为空。要得到倒序的结果,需要加负步幅:
list[i:j:-1]
因为显式优于隐式。
这记录在 Common Sequence Operations,脚注 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 thanlen(s)
, uselen(s)
. If i is omitted orNone
, use0
. Ifj
is omitted orNone
, uselen(s)
. If i is greater than or equal to j, the slice is empty.
大胆强调我的。
自定义类型可以自由地对此进行不同的解释。