当尝试使用"for I在List&Quot;中添加列表中的连续数字时,为什么我得到&Quot;List Index超出范围&Quot;?

Why do I get quot;List index out of rangequot; when trying to add consecutive numbers in a list using quot;for i in listquot;?(当尝试使用quot;for I在ListQuot;中添加列表中的连续数字时,为什么我得到Quot;List Index超出范围Quot;?)
本文介绍了当尝试使用"for I在List&Quot;中添加列表中的连续数字时,为什么我得到&Quot;List Index超出范围&Quot;?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

提供以下列表

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

问题是我一直收到这个错误:

索引错误:列表索引超出范围

我非常确定它会发生,因为当我得到a(3)的最后一个元素时,我不能将它添加到任何东西中,因为这样做超出了它的值(3之后没有值可加)。因此,我需要告诉代码停止于2,同时仍引用3进行计算。

推荐答案

  1. for循环中,您正在迭代列表a的元素。但在循环体中,您使用这些项来索引该列表,而实际上您需要索引。
    想象一下,如果列表a包含5个项目,数字100就在其中,并且for循环将到达它。实际上,您将尝试检索列表a的第100个元素,该元素显然不在那里。这将为您提供IndexError

    我们可以通过迭代一系列索引来修复此问题:

    for i in range(len(a))
    

    并访问a的项目:a[i]。这不会产生任何错误。

  2. 在循环体中,您不仅索引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,因此您仍将获得最后一个元素,但这样可以避免错误。

  3. 有许多不同的方法可以完成您在这里尝试做的事情。其中一些非常优雅,更像是列表理解:

    b = [a[i] + a[i+1] for i in range(len(a) - 1)]
    

    此操作只需一行即可完成工作。

这篇关于当尝试使用"for I在List&Quot;中添加列表中的连续数字时,为什么我得到&Quot;List Index超出范围&Quot;?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)