在处理数组切片时,我注意到a[index:] or a[:index]类型的切片不会为字符串产生超出绑定错误的数组索引。
str = "abcde"
print str[10:]
print str[:10]生产产出:
''
abcde有人能解释原因吗?它不应该产生数组索引超出界限的错误吗?如果我尝试执行类似于:print str[10]的操作,Python确实会产生这个错误。
发布于 2014-04-09 01:21:09
切片用于创建一个新列表。如果索引不属于列表中元素数的范围,我们可以返回一个空列表。所以,我们不必抛出一个错误。
但是,如果我们试图访问列表中的元素(它大于元素的数量),我们就不能返回任何默认值(甚至不能返回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);
}发布于 2014-04-09 01:19:49
这就是切片操作符是如何在python中实现的。如果数组索引超出界限,它将自动截断然后在正确的位置。
https://stackoverflow.com/questions/22951107
复制相似问题