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

标签 python string substring

为什么 '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/

相关文章:

python - 当数据具有 NaN 时,在 matplotlib 中的线图中绘制阴影不确定区域

python - 是否可以使用 float16 来训练 Tensorflow 1?

mysql - 查找一个表中的字符串是否是另一个列表中字符串的子字符串

c - 如何查找字符串中子字符串的所有出现次数和所有位置?

python - 传输/切换/更改两列的值,如果一列为 0/NaN

python - 当我的内核对这个 DataFrame 进行热编码时,是否应该继续死掉?

sql - Redshift (SQL): try convert to timestamp

Python 字符串有一个在 Linux 中存在但在 Windows 中缺失的字符

c - 如何在第一个空格处拆分字符串并将字符串分配给不同的变量?

python - 字符串中某个子串出现的次数