为了账号安全,请及时绑定邮箱和手机立即绑定

无法理解 Python Negative List Slice 的输出

无法理解 Python Negative List Slice 的输出

当年话下 2021-10-26 15:27:09
我在自己的 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?
查看完整描述

2 回答

?
UYOU

TA贡献1878条经验 获得超4个赞

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


查看完整回答
反对 回复 2021-10-26
?
撒科打诨

TA贡献1934条经验 获得超2个赞

请参阅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
这就是它的工作原理。


查看完整回答
反对 回复 2021-10-26
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信