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/58542150/

相关文章:

python - 从三个一维数组创建一个 3D 坐标的 numpy 数组

python - 使用 Robot 框架的 Selenium 网格实现

c# - 互操作将字符串从 C# 发送到 C++

java - 是否可以在 pycharm\intellij 中启动\调试应用程序之前将脚本设置为 'source'?

c - C语言中如何将字符串转换为整数?

python - 比较两个包含数字的 python 字符串

java - 按条件拆分和配对子字符串

mysql - 如何为 MySQL 中的每一行获取可变大小的子字符串?

c - 使用 strstr 时出现奇怪的错误

python - 如何在Python中分配新数组而不是构建指针