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

为什么超出范围的子字符串切片索引在Python中工作?

为什么超出范围的子字符串切片索引在Python中工作?

慕桂英3389331 2019-06-29 10:37:03
为什么超出范围的子字符串切片索引在Python中工作?为什么不'example'[999:9999]导致错误?自'example'[9]它背后的动机是什么?从这种行为我可以假设'example'[3]在本质上/内部,与'example'[3:4]尽管两者的结果是一样的'm'绳子。
查看完整描述

3 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

你说得对!'example'[3:4]'example'[3]从根本上讲是不同的,在序列的边界外切片(至少对于内置的)不会导致错误。

一开始它可能会令人惊讶,但当你想到它的时候,它是有意义的。索引返回单个项,但切片返回项的子序列。因此,当您尝试索引一个不存在的值时,没有什么可返回的。但是,当将序列分割到边界之外时,仍然可以返回空序列。

这里令人困惑的部分原因是,字符串的行为与列表略有不同。看看当你对一个列表做同样的事情时会发生什么:

>>> [0, 1, 2, 3, 4, 5][3]3>>> [0, 1, 2, 3, 4, 5][3:4][3]

这里的差别是显而易见的。在字符串的情况下,结果似乎是相同的,因为在Python中,不存在字符串之外的单个字符。一个字符只是一个1字符的字符串.


查看完整回答
反对 回复 2019-06-29
?
守候你守候我

TA贡献1802条经验 获得超10个赞

为了添加指向文献资料:

给出一个像这样的切片表达式s[i:j:k],

s从i到j的分片定义为具有指数x=i+n*k的条目序列,使得0<=n<(j-i)/k,换句话说,索引是i,i+k,i+2*k,i+3*k等,当j到达时停止(但不包括j)。当k为正时,如果i和j较大,则它们被降为len(S)。

如果你写s[999:9999],蟒蛇回来了s[len(s):len(s)]len(s) < 999你的步伐是积极的(1-违约)。


查看完整回答
反对 回复 2019-06-29
?
芜湖不芜

TA贡献1796条经验 获得超7个赞

切片不受内建类型的限制.虽然你的两个例子看起来都有相同的结果,但它们的工作方式不同;用一个列表来尝试它们。


查看完整回答
反对 回复 2019-06-29
  • 3 回答
  • 0 关注
  • 863 浏览
慕课专栏
更多

添加回答

举报

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