luk*_*k32 10
切片
\n\nstart和的负数stop表示“从末尾开始”。它本质上相当于len-value.step表示“按相反顺序”。len。停止参数是唯一的!所以[::-1]表示从第一个元素到最后一个元素,步长为 1,逆序排列。
[start:stop]话就和 一样了step=1。所以[:-1]这意味着除了最后之外的一切。这又是最后一个元素。[:-1:]它与or相同[0:-1:1]。如果只有start,它返回一个由索引给出的元素start。因此[-1]意味着最后一个元素。与...一样[len-1]。
范围
\n\n范围也有语法start,stop,step,但步骤有不同的含义。从 开始重复添加步骤start。所以你从 开始4,然后向下添加,-1直到你达到stop,也是排他性的。所以range(5,0)[::-1]相当于range(4,-1,-1). 你可以计算一下。
为什么翻译这么说range(0,5)[::-1] => range(4, -1, -1)?
Python 解释器足够智能,可以将一部分转换range为另一部分range。这是一种优化,范围是生成器。它们是动态的,即它们不会同时保存内存中的所有元素。如果您使用的解释器逐步工作,它必须生成整个列表,只是为了能够以相反的顺序迭代。计算新的生成器更加智能。
\xc5\x81ukasz\'es 答案详细解释了它是如何完成的。
\n\n顺便提一句。您可以强制它生成list,并阻止优化:
range(0,5)[::-1]\n=> range(4, -1, -1)\n list(range(0,5))[::-1]\n=> [4, 3, 2, 1, 0]\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
15245 次 |
| 最近记录: |