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

时间:2016-04-28 00:55:27

标签: python slice

在python中切片时,省略切片的end部分(即list[:end:]中的结束)会导致end被定义为&#34 ;被切片的字符串的大小。" *

但是,在切片中使用step参数(list[::step]中的步骤)时,这似乎不成立,至少在{ {1}}参数为step。一个简单的例子:

-1

这表示在传递>>> l = [1, 2, 3] >>> l[::-1] [3, 2, 1] >>> l[:len(l):-1] [] 参数的情况下,省略的step等效于显式传递被切片对象的大小。< / p>

也许这只是我阅读文档的失败,但我想理解为什么我的上述示例似乎与Python文档中有关在切片中省略end值的理由相矛盾,理想情况下这与记录在案。

<小时/> * Slice indices have useful defaults; an omitted first index defaults to zero, an omitted second index defaults to the size of the string being sliced.

2 个答案:

答案 0 :(得分:6)

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

实际文档在sequence types下的库参考中给出。虽然在第一次阅读时有点简洁并且不容易理解,但它确实澄清了对于切片myFunction(...args);

  

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

答案 1 :(得分:2)

l[::-1]l.__getitem__(slice(None, None, -1))相同。由于开始和停止都是None,因此列表将从一端遍历到另一端。 step参数确定方向和步骤。