如果列表[j]在list [i]之前,list [i:j]是否保证是空列表?

jam*_*lin 37 python list slice

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

我观察到的行为是返回一个空列表,这对我来说似乎是合理的.但是,对于我来说i,j在相反的顺序之间返回项目列表或仅仅提出异常对我来说似乎也是合理的.

list[i:j]保证是一个空列表,如果list[j]先于list[i]

Mar*_*ers 44

是,如果j <= i为true,则对于标准Python类型,结果切片为空.要以相反的顺序获得结果,您需要添加一个负步幅:

list[i:j:-1]
Run Code Online (Sandbox Code Playgroud)

因为显性比隐含更好.

这在常见序列操作中记录,脚注4:

的切片小号Ĵ被定义为物品的具有索引序列ķ使得i <= k < j.如果ij大于len(s),请使用len(s).如果被省略或None使用0.如果j省略或None使用len(s).如果i大于或等于j,则切片为空.

大胆强调我的.

自定义类型可以自由解释.

  • @bamboon:切片的处理是特定于类型的.`list`,`tuple`,`str`,`bytes`和`range`类型的行为都是这样的,但如果你实现自己的类型,你的`__getitem__`方法可以自由地处理不同的切片. (2认同)
  • @bamboon:我先发制人地沿着*行注释这是否也适用于字符串和元组?*和*但是项目X不是那样的行为,这是一个错误吗?*. (2认同)