当前位置: 首页 > 面试题库 >

为什么python的列表切片不会产生索引超出范围的错误?

厍胤运
2023-03-14
问题内容

在玩数组切片时,我注意到切片的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

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

对于字符串,如果切片后要返回的字符串的长度为0,则它​​将在此行中返回空字符串

if (slicelength <= 0) {
    return PyString_FromStringAndSize("", 0);
}


 类似资料:
  • 问题内容: 为什么不导致错误?既然如此,其背后的动机是什么? 从这种行为,我可以假设在本质上/内部与并不相同,即使两者都导致相同的字符串。 问题答案: 没错!和根本不同,并且在序列范围之外进行切片(至少对于内置对象而言)不会导致错误。 起初可能令人惊讶,但是当你考虑它时,这是有道理的。索引返回单个项目,但切片返回项目的子序列。因此,当你尝试索引不存在的值时,没有任何返回值。但是,当你在边界之外对序

  • 我正在阅读Al Sweigart的书《自动化无聊的东西》,我对我遇到的索引错误感到不知所措。我正在使用PyPDF2尝试打开一个加密的PDF文档。我知道这本书是2015年的,所以我去了文档,看看我是否遗漏了什么,一切似乎都一样,至少据我所知。所以我不确定这里出了什么问题。 给予: 在问我的问题之前,我在谷歌上搜索了一下,找到了这个带有“建议修复”的链接。然而,我对这一点很陌生,想看看解决方法是什么。

  • 我试着运行这个: 但是得到这个错误: 回溯(最后一次调用): 文件“C:\Users\Shakh\Desktop\Hello3.py”,第4行,在 打印(“Hallo”,sys.argv[1]) 索引器:列表索引超出范围

  • 问题内容: 我在读取CSV文件时遇到此错误(无标题,3列,第二和第三字符串): 这是下面代码的一部分。坚持起来简直是愚蠢的简单事情,但是对于如何工作我只是空白。我是编码的新手,但是之前已经处理过csv模块,并且从来没有遇到过这方面的问题,只是在记事本中制作了一些测试csv文件,以查看是否可以从相同的代码中读取它,并且可以。我不知道。 问题答案: 尝试检查空白行。另外,请避免将其用作变量名。是打开的

  • 问题内容: 给出以下列表 我想创建一个新列表,该列表由将当前值和下一个值相加的元素组成。它将包含 1 小于元件。 像这样: (从0 + 1、1 + 2和2 + 3) 这是我尝试过的: 问题是我不断收到此错误: 我很确定会发生这种情况,因为当我得到(3)的最后一个元素时,我无法将其添加到任何东西中,因为这样做超出了它的值(添加3之后就没有值了) )。因此,我需要告诉代码在2处停止,同时仍引用3进行计

  • 我有一个基于Euler项目问题3的代码:“13195的素数因子是5、7、13和29。600851475143中最大的素数因子是什么?” 我在下面有一个我认为可行的代码,但第9行()不断返回错误:“索引器:列表索引超出范围”。当我在for循环中移动时,似乎并没有修改列表,所以我不确定出了什么问题。 有人知道我哪里错了吗? 非常感谢。