[::-1] 在 python 中意味着什么 - 切片?

7bS*_*tan 5 python numpy list slice

我有一个变量a=range(0,5),我需要知道它为什么以及如何 a[::-1]工作。我得到的答案是range(4,-1,-1)。感谢帮助。

PS这是一个非常基本的问题,但由于这个问题是以非常结构化的方式回答的,我尝试编辑这个问题并使其更加普遍和有用。

luk*_*k32 10

切片

\n\n
    \n
  1. start和的负数stop表示“从末尾开始”。它本质上相当于len-value.
  2. \n
  3. 负数为step表示“按相反顺序”。
  4. \n
  5. 空开始意味着 0 即第一个元素。
  6. \n
  7. 空停意味着len。停止参数是唯一的!
  8. \n
\n\n

所以[::-1]表示从第一个元素到最后一个元素,步长为 1,逆序排列。

\n\n
    \n
  1. 如果有的[start:stop]话就和 一样了step=1。所以[:-1]这意味着除了最后之外的一切。这又是最后一个元素[:-1:]它与or相同[0:-1:1]
  2. \n
\n\n

如果只有start,它返回一个由索引给出的元素start。因此[-1]意味着最后一个元素。与...一样[len-1]

\n\n

范围

\n\n

范围也有语法start,stop,step,但步骤有不同的含义。从 开始重复添加步骤start。所以你从 开始4,然后向下添加,-1直到你达到stop,也是排他性的。所以range(5,0)[::-1]相当于range(4,-1,-1). 你可以计算一下。

\n\n

为什么翻译这么说range(0,5)[::-1] => range(4, -1, -1)

\n\n

Python 解释器足够智能,可以将一部分转换range为另一部分range。这是一种优化,范围是生成器。它们是动态的,即它们不会同时保存内存中的所有元素。如果您使用的解释器逐步工作,它必须生成整个列表,只是为了能够以相反的顺序迭代。计算新的生成器更加智能。

\n\n

\xc5\x81ukasz\'es 答案详细解释了它是如何完成的。

\n\n

顺便提一句。您可以强制它生成list,并阻止优化:

\n\n
   range(0,5)[::-1]\n=> range(4, -1, -1)\n   list(range(0,5))[::-1]\n=> [4, 3, 2, 1, 0]\n
Run Code Online (Sandbox Code Playgroud)\n