Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python循环:列表索引超出范围_Python_List_Loops_Python 3.x - Fatal编程技术网

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))