This question already has answers here:
Understanding slice notation
                                
                                    (32个答案)
                                
                        
                                2年前关闭。
            
                    
好的,我确定这个问题有点琐碎,但我很好奇!

在python中,这样做是完全合法的:

a = [1,2,3,4,5]
print(a[:123])

>> [1, 2, 3, 4, 5]


但是,只要您尝试这样做:

a = [1,2,3,4,5]
print(a[123])

>> IndexError: list index out of range


在将其存储在内存中并由编译器解释的上下文中,为什么会这样呢?

我尝试将第一个示例存储在变量中并检查该变量的长度,但这只是原始列表的长度,而忽略了随后的空白位置。

我真的很好奇,也很想知道答案是什么!

最佳答案

这定义了包含5个元素的列表

a = [1,2,3,4,5]


这表明您需要从列表的开始到第124个索引

>> print(a[:123])
>> [1, 2, 3, 4, 5]


您在正确地问为什么这不会引起分段错误或某些内存错误,因为此语句应该是非法的。没有第123或124索引。
此处的Python将从头开始,并继续进行迭代,直到出现以下两种情况:


达到最大索引(123)或
清单项目用完


换句话说,如果您要求C步行123步并且在5步后有悬崖的边缘,C会跳下悬崖,但Python不会

的情况下

print(a[123])


您不是从头开始迭代,而是要求直接跳到第123步。在这种情况下,C和Python都将因自己的哭声而崩溃(IndexError或Segmentation Fault)

09-10 04:24
查看更多