为什么Python的列表切片不会产生索引越界错误? [复制]

2024-03-13

在玩数组切片时我注意到a[index:] or a[:index]切片类型不会产生字符串的数组索引越界错误。

str = "abcde"
print str[10:]
print str[:10]

产生输出:

''
abcde

有人能解释一下为什么吗?它不应该产生数组索引越界错误吗?如果我尝试执行以下操作,Python 确实会产生此错误:print str[10].


切片用于创建新列表。如果索引不在列表中元素数量的范围内,我们可以返回一个空列表。所以,我们不必抛出错误。

但是,如果我们尝试访问列表中大于元素数量的元素,我们将无法返回任何默认值(甚至不能None因为它可能是列表中的有效值)。因此

IndexError: list index out of range

被抛出。

切片时,如果起始索引大于等于序列长度,则返回序列的长度设置为0,在此line http://hg.python.org/cpython/file/3a1db0d2747e/Objects/sliceobject.c#l178

defstop = *step < 0 ? -1 : length;
...
if (r->stop == Py_None) {
    *stop = defstop;
}
...
if ((*step < 0 && *stop >= *start)
    || (*step > 0 && *start >= *stop)) {
    *slicelength = 0;

对于Strings,如果切片后返回的字符串长度为0,则返回空字符串,在这条线 http://hg.python.org/cpython/file/3a1db0d2747e/Objects/stringobject.c#l1318

if (slicelength <= 0) {
    return PyString_FromStringAndSize("", 0);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Python的列表切片不会产生索引越界错误? [复制] 的相关文章

随机推荐

  • 使用 python/pandas 的字典理解与 str.contains 进行部分字符串匹配

    我有一个数据框 其中有一列名为course names使用带有课程名称列表的映射字典 我希望在键中匹配我想要在值列中分配的值 import pandas as pd df pd DataFrame course name Phsyics M
  • 获取所选元素的外部 HTML

    我正在尝试使用 jQuery 获取所选对象的 HTML 我知道 html 功能 问题是我需要包含所选对象的 HTML 在本例中为表格行 其中 html 仅返回行内的单元格 我四处搜索 发现了一些非常 hackish 类型的方法来克隆对象 将
  • Python:linecache 没有按预期工作?

    你好 我有这个 python 脚本 我需要用它来遍历一些目录并提取这些目录中的一些文件中的一些信息 所以我有很多目录 每个目录中还有 5 个子目录 在这 5 个子目录中 每一个都有 3 个文本文件 一个是我忽略的 txt 另一个是我需要阅读
  • 将切片的所有项目添加到通道中

    在 Go 中 是否有比以下更惯用的方法将数组 切片的所有元素添加到通道中 ch make chan string values string lol cat lolcat go func for v range values ch lt v
  • 可执行文件和可重定位目标文件的疑问

    我写了一个简单的Hello World 程序 include
  • 数据库安全组只能与使用 API 版本的 VPC 数据库实例关联

    我有下面的代码在 aws 中创建 RDS 实例 import boto rds REGION us east 1 INSTANCE TYPE db t1 micro ID MySQL db instance database test2 U
  • 使用 AJAX 关闭 Bootstrap 的模式

    我使用的模式是Twitter 的 Bootstrap http getbootstrap com 2 3 2 javascript html modals您可以通过单击按钮或与标签不同的内容来关闭模式data dismiss modal 我
  • IntelliJ:Ubuntu/linux 如何从 shell 使用 IntelliJ 打开文件

    遵循这个问题 似乎可以在 MAC 上使用 IntelliJ 从 shell 打开文件 IntelliJ 如何从命令行打开现有 IntelliJ 中的文件 https stackoverflow com questions 2695820 i
  • 如何按列值对数据框进行排序?

    我对 python 和 pandas 数据框架比较陌生 所以也许我在这里错过了一些非常简单的东西 因此 我的数据框包含许多行和列 但最后最终设法仅从每一列中获取具有最大值的一行 我用这段代码来做到这一点 import pandas as p
  • 在 OS X 上构建 valgrind

    我试图在 macOS Sierra 版本 10 12 6 上安装 valgrind 运行 configure sh时 出现以下错误 检查受支持的 gcc 版本 配置为 prefix Library Developer CommandLine
  • Material React 分页,更改每页行数

    Material React 分页组件是否有页面大小选项 每页行数 我在列出的 API 中没有看到它 我知道 TablePagination 组件可以 但是常规组件似乎没有
  • 如何在 play (2.3) 框架内从 Java 控制器代码中的 String 变量构造 Html 对象

    I am just开始使用 play 框架 我试图了解 java 应用程序代码和基于 scala 的模板框架之间的交互 注意 到目前为止 我对 Scala 一无所知 除了它是另一种编译语言之外到 JVM 上的字节码 并且 Scala 和 J
  • 具有模糊背景的 C# 对话框窗体

    下午好 Just a simple question Is it possible to make a parent form blurry while you show a new dialog form in winforms if i
  • Azure Bot 通道注册,通道部分为空

    我在 Azure 门户上使用 机器人通道注册 服务时遇到问题 创建服务后 频道 部分不会加载 仅保留空白 Screenshot 有什么帮助吗 经过多次测试 我通过将Azure门户的语言和区域更改为英语 美国 解决了该问题
  • 如何清除服务总线主题订阅的消息

    只是想知道从服务总线主题的订阅中清除消息的最佳方法 即使通过 Portal Powershell 或 C 假设我们有一个包含 4 个订阅的主题 而我们只想清除其中一个订阅中的消息 我有一种感觉 唯一的方法可能是在 while 循环中阅读消息
  • 节点:Socket io require.resolve 不是一个函数吗?

    我很惊讶谷歌搜索没有给我任何结果 无论如何 这是我使用时的问题socket io 当我进一步检查时 是来自 socket io index js 源文件 第 28 行 导致了问题 var clientSource read require
  • 评估数学表达式

    我正在寻找一种可用于评估数学表达式的算法 我在 SO 上看到了一些类似的问题 但答案是 C Delphi 或 python 特定的 我需要用 C 语言编写算法 我试图解决的问题是给定一个用户输入 例如 3 2 x 1 x 我可以计算 x 的
  • D3DERR_INVALIDCALL 错误,TeamCity 生成器

    我一直在尝试使用 TeamCity 4 5 来自动构建 XNA 项目 但我遇到了一个小问题 我的项目在 Visual Studio 2008 下可以正确编译 但在使用 TeamCity 作为生成器进行编译时则无法正确编译 配置文件使用 sl
  • 有没有办法从 ios 中的 mp3 中提取嵌入的图像数据

    我知道 mp3 有时包含专辑插图 就我而言 我正在处理播客文件 iOS 有没有办法从 mp3 文件中提取图像数据 MP3 包括播客 通常具有嵌入的元数据 包括艺术品 获取嵌入元数据 对于不在 iTunes 库中的 MP3 的最简单方法是通过
  • 为什么Python的列表切片不会产生索引越界错误? [复制]

    这个问题在这里已经有答案了 在玩数组切片时我注意到a index or a index 切片类型不会产生字符串的数组索引越界错误 str abcde print str 10 print str 10 产生输出 abcde 有人能解释一下为