为什么 'example'[999:9999]
不会导致错误?既然 'example'[9]
有,那背后的动机是什么?
根据这种行为,我可以假设 'example'[3]
本质上/内部与 'example'[3:4]
不同,甚至尽管两者都产生相同的 'm'
字符串。
最佳答案
你是对的! 'example'[3:4]
和 'example'[3]
本质上是不同的,并且在序列边界之外进行切片(至少对于内置函数)不会'不会导致错误。
一开始可能会令人惊讶,但仔细想想,它就很有意义。索引返回单个项目,但切片返回项目的子序列。因此,当您尝试索引一个不存在的值时,没有什么可以返回。但是当你对一个超出边界的序列进行切片时,你仍然可以返回一个空序列。
这里令人困惑的部分原因是字符串的行为与列表略有不同。看看当你对一个列表做同样的事情时会发生什么:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
这里的区别很明显。在字符串的情况下,结果似乎是相同的,因为在 Python 中,没有字符串之外的单个字符这样的东西。单个字符只是一个 1 字符的字符串。
(有关在序列范围之外进行切片的确切语义,请参见 mgilson's answer。)
关于python - 为什么索引超出范围的子字符串切片有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9490058/