在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.
答案 0 :(得分:6)
您引用的文档是本教程,它仅提供Python语法和语义的非正式概述。它没有解释所有细节。您注意到您链接的教程页面甚至不讨论负面索引。
实际文档在sequence types下的库参考中给出。虽然在第一次阅读时有点简洁并且不容易理解,但它确实澄清了对于切片myFunction(...args);
:
如果i或j被省略或无,则它们变为“结束”值(结束取决于k的符号)。
答案 1 :(得分:2)
l[::-1]
与l.__getitem__(slice(None, None, -1))
相同。由于开始和停止都是None
,因此列表将从一端遍历到另一端。 step
参数确定方向和步骤。