鱼C论坛

 找回密码
 立即注册
查看: 1161|回复: 9

代码理解

[复制链接]
发表于 2023-5-22 23:42:27 | 显示全部楼层 |阅读模式
1鱼币
如图所示,我理解 [5, "上", 4, "山", 3, "打", 2, "老", 1, "虎"][-2::-2]是这样的:首先定义起始位置和终止位置,也就是-2: ,那么结果是[1,"虎"],最后步长-2应该分为两步理解,显示翻转,结果是[“虎”,1],最后步长2,因为总共只有两个元素,因此选取第一个元素,结果是[“虎”],不知道我这样理解错在哪儿。我看小甲鱼的理解,应该是先理解步长-2,再去理解其他的,切片执行顺序不是start,stop,再到step吗

图片5.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-22 23:50:35 | 显示全部楼层
你的理解有一点误解。在 Python 中,切片操作的步长(step)是和切片的方向(start到stop)相关联的。如果步长为正,切片从左往右进行;如果步长为负,切片从右往左进行。因此,当你使用步长为-2的切片操作时,你实际上是在从右往左进行切片操作。

先让我们看看这个列表 [5, "上", 4, "山", 3, "打", 2, "老", 1, "虎"]。Python 的索引可以是负数,负数表示从右边开始数,-1就是最右边的元素。对于这个列表,索引-2的元素就是1。

那么,当你进行 [5, "上", 4, "山", 3, "打", 2, "老", 1, "虎"][-2::-2] 操作时,你的起始位置是-2(也就是1),结束位置为空,步长为-2。从右向左每隔一个元素选取,所以结果应该是 [1, "老", "打", "山", 5]。

你对切片执行顺序的理解没错,确实是先指定 start 和 stop,然后再到 step,但你需要注意,步长的正负决定了切片的方向。希望这个解释对你有所帮助。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 07:47:43 From FishC Mobile | 显示全部楼层
isdkz 发表于 2023-5-22 23:50
你的理解有一点误解。在 Python 中,切片操作的步长(step)是和切片的方向(start到stop)相关联的。如果 ...

结果是[1,2,3,4,5]
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 07:52:06 From FishC Mobile | 显示全部楼层
ansire 发表于 2023-5-23 07:47
结果是[1,2,3,4,5]

不过我能理解你的意思。我之前有一点误解了,就是[-2:],我理解成:是到最右侧的元素的意思,而实际上代码会先判断步长是正数还是负数,当为负数时,-2后面的冒号表示最开始的位置。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 08:58:21 From FishC Mobile | 显示全部楼层
列表切片,就像是切蛋糕,把列表想象成蛋糕,从左往右切(step为正默认),从右往左切(step为负),只不过有一条潜规则就是切的距离要和第一次一致(平均分配)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 22:01:20 | 显示全部楼层
isdkz 发表于 2023-5-22 23:50
你的理解有一点误解。在 Python 中,切片操作的步长(step)是和切片的方向(start到stop)相关联的。如果 ...

顺序应该是start step stop,亲测
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 22:02:17 | 显示全部楼层
ansire 发表于 2023-5-23 22:01
顺序应该是start step stop,亲测

你测错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 22:05:03 | 显示全部楼层

以这一题为例,如果是START,STOP,STEP顺序,那么第一步执行结果就只剩下[1,虎]了,最后的-2再去读取,就只能剩下[“虎”]。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-23 22:14:14 | 显示全部楼层
ansire 发表于 2023-5-23 22:05
以这一题为例,如果是START,STOP,STEP顺序,那么第一步执行结果就只剩下[1,虎]了,最后的-2再去读取,就 ...

这个切片不是分成两步的呀。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2023-5-23 22:21:53 | 显示全部楼层
isdkz 发表于 2023-5-23 22:14
这个切片不是分成两步的呀。。。。

计算机的执行顺序,计算机读取完参数后,肯定有个内部执行逻辑,先怎么干、再怎么干,我的测试结果是,先确定START,再根据最后一个参数的正负数确定顺序,再去根据命令抓取里面的值
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 20:43

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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