鱼C论坛

 找回密码
 立即注册
查看: 2164|回复: 6

[已解决]关于列表切片操作问题?

[复制链接]
发表于 2023-9-6 15:36:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
微信图片_20230906152743.png   不应是我标记的这种结果吗?为什么是小甲鱼这种解释?
最佳答案
2023-9-6 18:02:03
lbf4325 发表于 2023-9-6 17:51
我感觉是不是理解切取条件的优先级什么的有关系,我的理解的结果如下

你不能分开理解,分开就不对了,要和步长一起理解,对于终点其实如果没有指明你就依据步长去算,直到出界停止

本帖被以下淘专辑推荐:

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

使用道具 举报

发表于 2023-9-6 16:22:07 | 显示全部楼层
本帖最后由 yinda_peng 于 2023-9-6 16:23 编辑

关键在于最后一个步长参数,你想,为什么[-2::]会是[1,‘虎’],因为是从[-2]开始走,步长为默认的1,[-2]就是1,然后[-2]走到[-1]就是“虎”,那么我们说步长是-2,开始是[-2]就是1,然后走-2个单位长度,索引变成了[-4]就是元素2,到最后索引为[-10]就是第一个元素,再走就出界了,于是停止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-6 17:46:24 | 显示全部楼层
yinda_peng 发表于 2023-9-6 16:22
关键在于最后一个步长参数,你想,为什么[-2::]会是[1,‘虎’],因为是从[-2]开始走,步长为默认的1,[-2] ...

我的理解是这样的[-2::],这里[-2::]这一段我的理解是从列表-2位置,从左往右算到末尾,相当于切取原列表形成一个新列表步进是1,从左往右那么新形成的列表是[1,“虎”],那么[-2::-2]后边这个-2也只是在[1,“虎”]中,以反方向-2的步长取切取形成一个新列表["虎"]吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-6 17:51:04 | 显示全部楼层
lbf4325 发表于 2023-9-6 17:46
我的理解是这样的[-2::],这里[-2::]这一段我的理解是从列表-2位置,从左往右算到末尾,相当于切取原列表 ...

我感觉是不是理解切取条件的优先级什么的有关系,我的理解的结果如下
列表切片.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-6 18:02:03 | 显示全部楼层    本楼为最佳答案   
lbf4325 发表于 2023-9-6 17:51
我感觉是不是理解切取条件的优先级什么的有关系,我的理解的结果如下

你不能分开理解,分开就不对了,要和步长一起理解,对于终点其实如果没有指明你就依据步长去算,直到出界停止
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-9-11 09:51:11 | 显示全部楼层
yinda_peng 发表于 2023-9-6 18:02
你不能分开理解,分开就不对了,要和步长一起理解,对于终点其实如果没有指明你就依据步长去算,直到出界 ...

[-2::-2]和[-2::2] 就是说这个终点往哪个方向取决于切片的步长的方向,步长为正就从左往右,步长为负就从右往左! 其实我感觉我还没有从原理上理解,只是记住这个方法,难道规定就是这样的?就比如说索引为什么0开始,看了文章我就知道他为啥要这么干!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-9-11 18:40:25 | 显示全部楼层
lbf4325 发表于 2023-9-11 09:51
[-2::-2]和[-2::2] 就是说这个终点往哪个方向取决于切片的步长的方向,步长为正就从左往右,步长为负就从 ...

我的理解可能更趋向于就是一种规定,至于说为什么这样做,我没有那么深的理解和研究,我给你提供一下AI的一些说法吧
以下为AI回复:
问:
有没有阐述为什么这么定义步长这种参量的文章?
答:
Python中切片操作的步长参数(stride,或者也叫step)的定义和行为是经过一定的设计和讨论的,旨在提供一种直观、灵活且功能强大的方式来操作序列类型(如列表、字符串等)的元素。虽然没有单一的文章或规范详细阐述这个设计决策,但可以通过以下几个原因来理解为什么要这样定义步长参数:

一致性: Python的设计哲学之一是保持一致性。通过使步长参数的行为与索引选择方式保持一致,可以使语言更容易学习和使用。这样,开发者可以将对切片的理解扩展到步长上,而不必学习额外的规则。

灵活性: 定义步长参数为整数允许使用者指定任何跳跃模式,包括向前、向后或跳跃式的访问元素。这种灵活性对于处理不规则的数据或特定的应用场景非常有用。

正负步长: 正步长和负步长分别表示向前和向后的方向。这样可以轻松地反转序列或反向迭代它,而不需要额外的操作。

通用性: 步长参数的通用性使得可以用相同的语法来处理各种序列类型,包括列表、字符串、元组等。这增加了Python的通用性和一致性。

简洁性: 步长参数的设计使得可以用一种简洁的方式来表达复杂的选择模式,而无需编写额外的循环或逻辑。

虽然这些是步长参数设计的一些主要原因,但请注意,Python的设计决策是由Python社区的核心开发者共同制定的,而不是通过单一的文章或规范来定义的。这些决策旨在提供一种自然而然的方式来处理序列,以满足不同开发者的需求。如果您对Python的设计决策感兴趣,可以查看Python的PEP(Python Enhancement Proposals)文档,其中包含了关于语言特性和设计决策的详细信息。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-24 10:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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