鱼C论坛

 找回密码
 立即注册
查看: 4318|回复: 13

再问列表切片的负数步长

[复制链接]
发表于 2023-4-2 18:55:21 | 显示全部楼层
这段代码的意思是先创建了一个列表 list,包括 1 到 6 的整数。然后使用列表切片的方式,从列表末尾开始每隔 3 个元素取一个元素,最后返回这些被选中的元素组成的新列表。具体来说:

[::-3] 表示取整个列表的逆序,步长为 3。
取到的第一个元素是 6,因为它是距离列表末尾最近的且索引可以被 3 整除的元素(即列表的倒数第一个元素)。
然后跳过两个元素,再次找到一个满足要求的元素 3(即列表的倒数第四个元素)。
再次跳过两个元素,没有更多满足要求的元素了,于是返回由 6 和 3 组成的新列表 [6, 3]。
需要注意的是,在切片时如果不指定起始索引和终止索引,则默认从列表的开头到结尾。而如果步长是负数,则表示从列表的结尾开始取元素。所以 [::-3] 可以看作是 len(list)-1::-3 的缩写形式,其中 len(list)-1 对应的是列表的最后一个元素的索引。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-2 19:27:16 | 显示全部楼层
lzb1001 发表于 2023-4-2 19:17
还需要可以被 3 整除?

那如果刚好对应的两个元素都不能被3整数怎么办?

非常抱歉,我的回答有误,不必要求选取的元素下标必须能被 3 整除。

在这段代码中,切片 [::-3] 取反后每隔三个元素取一个元素。因此,在列表 list 中,第一个选定的元素是最后一个元素 6,然后需要跳过两个元素,然后查询下一个符合条件的元素,发现是倒数第四个元素 3,再次跳过两个元素发现没有下一个符合条件的元素了。所以最终选定的元素是 6 和 3,组成新列表 [6, 3]。

如果在这个过程中有某一步没有找到符合条件的元素,则会直接停止搜索,返回当前已经选定的元素组成的新列表。也就是说,如果在这个例子中没有找到一个元素的下标既是 3 的倍数又是列表长度的倍数,则它们之间的元素会被忽略掉。

感谢您提出问题,希望这次解释更加清晰明了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-9-30 06:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表