Python-为什么索引超出范围的子字符串切片有效?

发布于 2021-02-02 23:20:43

为什么不'example'[999:9999]导致错误?既然如此'example'[9],其背后的动机是什么?

从这种行为,我可以假设在'example'[3]本质上/内部与并不相同'example'[3:4],即使两者都导致相同的'm'字符串。

关注者
0
被浏览
297
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    没错!'example'[3:4]'example'[3]根本不同,并且在序列范围之外进行切片(至少对于内置对象而言)不会导致错误。

    起初可能令人惊讶,但是当你考虑它时,这是有道理的。索引返回单个项目,但切片返回项目的子序列。因此,当你尝试索引不存在的值时,没有任何返回值。但是,当你在边界之外对序列进行切片时,你仍然可以返回空序列。

    令人困惑的部分原因是字符串的行为与列表有所不同。查看对列表执行相同操作时会发生什么:

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

    在这里,区别是显而易见的。对于字符串,结果似乎是相同的,因为在Python中,字符串外没有单个字符之类的东西。一个字符只是一个1个字符的字符串。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看