为什么list [:: - 1]不等于list [:len(list): - 1]?

Nol*_*lty 7 python slice

当切片在Python,省略了end该片段的部分(即,端部list[:end:]中)的结果end被定义为"串的大小被切片".*

然而,这似乎并没有使用的时候是成立的step参数(list[::step]的切片),至少在step说法是-1.一个简单的例子:

>>> l = [1, 2, 3]
>>> l[::-1]
[3, 2, 1]
>>> l[:len(l):-1]
[]
Run Code Online (Sandbox Code Playgroud)

这表明在step传递参数的情况下,省略的end等于显式传递被切片的对象的大小.

也许这只是我阅读文档的失败,但我想了解为什么我的上述示例似乎与Python文档中有关省略end切片中的值的理由相矛盾,理想情况下,这些文档的不同之处.


*切片索引具有有用的默认值; 省略的第一个索引默认为零,省略的第二个索引默认为要切片的字符串的大小.

Bre*_*arn 6

您引用的文档是本教程,它仅提供Python语法和语义的非正式概述.它没有解释所有的细节.您会注意到您链接到的教程页面甚至没有讨论负面索引.

实际文档在序列类型下的库引用中给出.虽然在第一次阅读时有点简洁并且不易理解,但它确实澄清了一个切片[i:j:k]:

如果i或j被省略或无,则它们变为"结束"值(其结束取决于k的符号).