基本Python - 查找列表中元素之间的差异 - IndexError

时间:2017-11-11 19:20:15

标签: python python-3.x index-error

我试图在银行帐户中每天增加5天。我创建了一个列表。我需要创建一个跟踪每日增加的新列表,以便稍后我可以找到平均增加,最大增加等。我遇到的问题是我一直得到一个Indexerror。谁能帮帮我吗?我变得非常沮丧。我之前做过类似的编码(没有确定2个元素之间的差异),我没有问题。当我向模块添加数学时,它就会爆炸。

代码如下(我所有打印语句的原因是仔细检查以确保列表正确):

acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]

index = 0
total = 0
amt_increase = []
while index < len(acct_balance):
    if index != 0:
        change = acct_balance[index+1] - acct_balance[index]
        amt_increase.append(change)
        total = total + change
    index = index + 1

print('Account balances: ',acct_balance)
print('Daily Increase: ',amt_increase)
print('Total Increases: ',total)

我尝试运行时遇到以下错误:

Traceback (most recent call last):
  File "C:\Users\Rogue\Desktop\Rogue Help\HELP.py", line 9, in <module>
    change = acct_balance[index+1] - acct_balance[index]
IndexError: list index out of range

这是针对学校的,所以我不能使用我以前从未见过的编码,因此不明白。谢谢!

3 个答案:

答案 0 :(得分:2)

您的循环正在检查列表中是否存在不存在的元素。 你的循环长度是五。因此,如果在循环的每次迭代中将索引递增1,最终将最终引用列表中不存在的元素[element 6],并且python将抛出错误“list index out of range”

如果您再次看到“列表索引超出范围”错误,我会检查以确保您不会意外地编写代码以引用超出列表范围的内容。

答案 1 :(得分:0)

您的循环过于复杂,这使得很难考虑索引的工作原理。用for循环替换它应该有助于清除逻辑:

amt_increase = []
for index in range(1, len(acct_balance)):
    change = acct_balance[index] - acct_balance[index - 1]
    amt_increase.append(change)
    total += change

您原件中的问题是,在最后一步,您尝试访问下一个不存在的索引。我已将其反转,以便检查前一天,以便range的限制易于阅读。

如果你想更进一步并且对列表推导感到满意,可以将循环转换为单个表达式(除了计算total,但你可以稍后以各种方式执行此操作):< / p>

amt_increase = [today - yesterday
                for today, yesterday
                in zip(acct_balance[1:], acct_balance[:-1])]

压缩切片列表可让您以正确的方式排列。

答案 2 :(得分:0)

acct_balance = [9852.24,9854.25,9954.24,9985.56,10056.98]
acct_increase = []

for index, value in enumerate(acct_balance):
    if index == 0:
        continue
    acct_increase.append(acct_balance[index] - acct_balance[index - 1])

他们说计算机科学有两个难点:命名约定,缓存未命中和逐个错误。

不是向前看数组(导致你看到结尾),而是在跳过第0个元素后总是向后看。也不要使用while循环来循环遍历python中的数组,总是使用for-each循环。我能把功课归功于:)