This question already has answers here:
Understanding slice notation
(32个答案)
2年前关闭。
好的,我确定这个问题有点琐碎,但我很好奇!
在python中,这样做是完全合法的:
但是,只要您尝试这样做:
在将其存储在内存中并由编译器解释的上下文中,为什么会这样呢?
我尝试将第一个示例存储在变量中并检查该变量的长度,但这只是原始列表的长度,而忽略了随后的空白位置。
我真的很好奇,也很想知道答案是什么!
这表明您需要从列表的开始到第124个索引
您在正确地问为什么这不会引起分段错误或某些内存错误,因为此语句应该是非法的。没有第123或124索引。
此处的Python将从头开始,并继续进行迭代,直到出现以下两种情况:
达到最大索引(123)或
清单项目用完
换句话说,如果您要求C步行123步并且在5步后有悬崖的边缘,C会跳下悬崖,但Python不会
的情况下
您不是从头开始迭代,而是要求直接跳到第123步。在这种情况下,C和Python都将因自己的哭声而崩溃(IndexError或Segmentation Fault)
(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)