Python循环:列表索引超出范围
给出以下列表Python循环:列表索引超出范围,python,list,loops,python-3.x,Python,List,Loops,Python 3.x,给出以下列表 a = [0, 1, 2, 3] 我想创建一个新的列表b,它由元素组成,a的当前值和下一个值被求和。它将包含1少于a的元素 像这样: b = [1, 3, 5] (从0+1、1+2和2+3开始) 以下是我尝试过的: b = [] for i in a: b.append(a[i + 1] - a[i]) b 问题是我一直都会遇到这样的错误: IndexError: list index out of range 我很确定它会发生,因为当我得到a(3)的最后一个元素的值
a = [0, 1, 2, 3]
我想创建一个新的列表b
,它由元素组成,a
的当前值和下一个值被求和。它将包含1少于a
的元素
像这样:
b = [1, 3, 5]
(从0+1、1+2和2+3开始)
以下是我尝试过的:
b = []
for i in a:
b.append(a[i + 1] - a[i])
b
问题是我一直都会遇到这样的错误:
IndexError: list index out of range
我很确定它会发生,因为当我得到a(3)的最后一个元素的值时,我无法将它添加到任何内容中,因为这样做超出了它的值(3之后没有值可添加)。因此,我需要告诉代码在2处停止,同时仍然引用3进行计算。当您在a:中调用I的
时,您得到的是实际的元素,而不是索引。当我们到达最后一个元素时,即3
,b.append(a[i+1]-a[i])
查找a[4]
,没有找到,然后失败。相反,尝试迭代索引,同时在最后一个索引之前停止,如
对于范围(0,len(a)-1)中的i:做点什么
但是,您当前的代码还不能用于“做某事”部分;) 尝试将for循环的范围缩小到范围(len(a)-1)
:
这也可以写成:
您正在访问列表元素,然后使用它们尝试为列表编制索引。这不是一个好主意。您已经有了一个答案,说明了如何使用索引来获取求和列表,但另一个选项是使用列表本身的一个片段来对列表进行求和
b = [i + j for i, j in zip(a, a[1:])]
在for
循环中,您正在迭代列表a
的元素。但在循环的主体中,当您实际需要索引时,您使用这些项为该列表编制索引。
想象一下,如果列表a
包含5个项目,其中有一个数字100,for循环将到达它。实际上,您将尝试检索列表a
中的第100个元素,而该元素显然不存在。这将为您提供一个索引器
李>
我们可以通过迭代一系列索引来解决此问题:
for i in range(len(a))
并访问a
的如下项:a[i]
。这不会给出任何错误
在循环体中,不仅要为a[i]
建立索引,还要为a[i+1]
建立索引。这也是一个潜在错误的地方。如果您的列表包含5个项目,并且您像我在第1点中所显示的那样对其进行迭代,那么您将得到一个索引器
。为什么?因为范围(5)
本质上是01234
,所以当循环达到4时,您将尝试获取a[5]
项。由于Python中的索引从0开始,并且列表包含5项,因此最后一项的索引为4,因此获取a[5]
意味着获取不存在的第六个元素
要解决这个问题,您应该从len(a)
中减去1,以获得范围序列0 1 2 3
。因为您使用的是索引i+1
,所以仍然会得到最后一个元素,但这样可以避免错误
有很多不同的方法来完成你在这里要做的事情。其中一些非常优雅,更“pythonic”,如列表理解:
b=[a[i]+a[i+1]表示范围内的i(len(a)-1)]
这只在一行中完成工作。首先,在追加的行中,右括号在哪里?这将为您提供一个SyntaxError
b = [i + j for i, j in zip(a, a[1:])]
for i in range(len(a))