给出以下列表
a = [0, 1, 2, 3]
我想创建一个新列表 b
,其中包含对 a
的当前值和下一个值求和的元素。它将比 a
少 1 个 元素。
像这样:
b = [1, 3, 5]
(从 0+1、1+2 和 2+3)
这是我尝试过的:
b = []
for i in a:
b.append(a[i + 1] + a[i])
问题是我一直收到这个错误:
IndexError:列表索引超出范围
我很确定它会发生,因为当我得到 a
(3) 的最后一个元素时,我无法将它添加到任何东西中,因为这样做超出了它的价值(有添加 3 后没有值)。所以我需要告诉代码在 2 处停止,同时仍然参考 3 进行计算。
原文由 Dance Party2 发布,翻译遵循 CC BY-SA 4.0 许可协议
for
循环中,您正在遍历列表的元素a
。但是在循环体中,当您真正需要索引时,您正在使用这些项目来索引该列表。想象一下,如果列表
a
包含 5 个项目,其中有一个数字 100,for 循环将到达它。您实际上将尝试检索列表的第 100 个元素a
,这显然不存在。这会给你一个IndexError
。我们可以通过遍历一系列索引来解决这个问题:
并访问
a
的项目:a[i]
。这不会给出任何错误。a[i]
,还要索引a[i+1]
。这也是一个潜在错误的地方。如果您的列表包含 5 个项目并且您像我在第 1 点中所示的那样对其进行迭代,您将得到一个IndexError
。为什么?因为range(5)
本质上是0 1 2 3 4
,所以当循环达到 4 时,您将尝试获取a[5]
项目。由于 Python 中的索引从 0 开始并且您的列表包含 5 个项目,最后一个项目的索引为 4,因此获取a[5]
将意味着获取不存在的第六个元素。要解决此问题,您应该从
len(a)
中减去 1 以获得范围序列0 1 2 3
。由于您使用的是索引i+1
,您仍然会得到最后一个元素,但这样可以避免错误。这只在一行中完成工作。