首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么python的列表切片不会产生超出界限错误的索引?

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

Stack Overflow用户
提问于 2014-04-09 01:16:41
回答 2查看 7.4K关注 0票数 14

在处理数组切片时,我注意到a[index:] or a[:index]类型的切片不会为字符串产生超出绑定错误的数组索引。

代码语言:javascript
复制
str = "abcde"
print str[10:]
print str[:10]

生产产出:

代码语言:javascript
复制
''
abcde

有人能解释原因吗?它不应该产生数组索引超出界限的错误吗?如果我尝试执行类似于:print str[10]的操作,Python确实会产生这个错误。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-04-09 01:21:09

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

但是,如果我们试图访问列表中的元素(它大于元素的数量),我们就不能返回任何默认值(甚至不能返回None,因为它可能是列表中的一个有效值)。这就是为什么

代码语言:javascript
复制
IndexError: list index out of range

被扔了。

在切片时,如果起始索引大于或等于序列的长度,则返回序列的长度在此线路中设置为0。

代码语言:javascript
复制
defstop = *step < 0 ? -1 : length;
...
if (r->stop == Py_None) {
    *stop = defstop;
}
...
if ((*step < 0 && *stop >= *start)
    || (*step > 0 && *start >= *stop)) {
    *slicelength = 0;

对于字符串,如果切片后返回的字符串长度为0,则返回这条线中的空字符串。

代码语言:javascript
复制
if (slicelength <= 0) {
    return PyString_FromStringAndSize("", 0);
}
票数 17
EN

Stack Overflow用户

发布于 2014-04-09 01:19:49

这就是切片操作符是如何在python中实现的。如果数组索引超出界限,它将自动截断然后在正确的位置。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22951107

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档