无法理解 Python Negative List Slice 的输出

我在自己的 Python 3 上运行代码。


我不明白这个输出


sqs = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

print(sqs[7:5:-1])

[49, 36]

解释器是否跳过第 0 个元素,即 0 并将列表读取为[1, 4, 9, 16, 25, 36, 49, 64, 81],然后打印第 7 个元素,即49?


那么它如何打印36?它是否向前读取[64,81],然后向后读取[64,49,36],从而打印第 5 个元素,即36?


如果这是正确的,则解释以下输出


>>> print(sqs[7:4:-1])

[49, 36, 25]

我可以理解 python 跳过第 0 个元素,计数到 7 并打印49. 但是现在我指定了一个 4 的间隙。那么解释器不应该读取[64,81],然后反过来,即[64,49],并打印49?它是如何打印的25?


当年话下
浏览 134回答 2
2回答

UYOU

切片[i:j:k]表示从索引 i 开始取元素,步进 k,直到达到 j。所以 [7,4,-1] 得到索引 7、6 和 5。请参阅doc。

撒科打诨

请参阅range()Python 文档中方法的定义。range(start, stop, step)在这里,start 指定了它将从哪里开始的值,stop 指定了它必须在其之前停止的值,即 stop-1。step表示跳转。现在,如果参数是类似的range(2,5,1),那么它会从 2 开始,然后跳 1,即加 1 到 2。现在,它又会加 1 到 3,变成 4。现在,4 等于 5 -1. 因此它停止。列表切片是类似的东西。现在,你有这样的事情:sqs[7:5:-1]这类似于范围,但这里开始是 7,停止是 5,步长是 -1。因此它生成一个降序列表。现在它生成的值是:[7, 6]5 不算在内,因为 stop =5 并且我们只需要考虑到 stop-1,即5-(-1) = 6。这就是它的工作原理。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python