1

我试图找到一个银行账户 5 天的每日增长。我创建了一个列表。我需要创建一个新列表来跟踪这些每日增长,以便稍后我可以找到平均增长、最大增长等。我遇到的问题是我不断收到 Indexerror。谁能帮帮我吗?我变得非常沮丧。我以前做过类似的编码(没有确定两个元素之间的区别),我没有问题。我将数学添加到模块的那一刻,它就爆炸了。

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

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

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

4

3 回答 3

2

您的循环正在检查您的列表中是否存在不存在的元素。你的循环长度是五。因此,如果您在循环的每次迭代中将索引增加一个,您最终将引用列表中不存在的元素 [element 6],python 将抛出错误,提示“列表索引超出范围”

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

于 2017-11-11T19:41:50.557 回答
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,但您可以稍后通过多种方式执行此操作):

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

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

于 2017-11-11T19:31:48.610 回答
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 循环。我能得到你的功课吗:)

于 2017-11-11T19:36:53.030 回答