gpt4 book ai didi

python - 为什么你可以将列表切片超过总索引计数,但不能直接检索所述索引?

转载 作者:太空宇宙 更新时间:2023-11-03 21:27:51 24 4
gpt4 key购买 nike

好吧,我确信这个问题有点微不足道,但我很好奇!

在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 将从头开始并继续迭代,直到:-

  1. 达到最大索引 (123) OR
  2. 列出的项目已用完

换句话说,如果你让C走123步,5步后有悬崖边缘,C会跳下悬崖,但Python不会

如果出现

print(a[123])

您不是从头开始迭代,而是要求直接跳到第 123 步。在这种情况下,C 和 Python 都会因各自的错误而崩溃(索引错误或段错误)

关于python - 为什么你可以将列表切片超过总索引计数,但不能直接检索所述索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53738114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com