2017-11-11 112 views
1

我试图找到5天的银行账户的每日增长。我有一个创建的列表。我需要创建一个新的列表来跟踪这些每日增长,以便稍后可以找到平均增加,最大增加等。我遇到的问题是我不断收到Indexerror。谁能帮帮我吗?我感到非常沮丧。我之前做过类似的编码(没有确定2个元素之间的差异),我没有问题。当我给模块添加数学的那一刻,它就爆炸了。基本Python - 查找列表中的元素之间的差异 - 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 

这是学校,所以我不能使用的编码我从来没有见过,所以不明白。谢谢!

+0

索引从零开始。你在这段时间的状况是指数 fernand0

+0

哇。谢谢你们每一个人的帮助!我真的很享受Python,但这令人沮丧。我读了所有人的答案,最终只是点击了!我没有使用任何人的确切想法,只是因为我必须像我的大脑一样编写我的代码(我希望你能理解)。所以我把我的编码保留了下来,除非我把我的数学改为:change = acct_balance [index] - acct_balance [index-1]。有效!我实际上开始拍手,因为我很兴奋。我完全不能感谢你。你是最棒的! – Rogue

回答

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循环。我是否可以获得作业信用:)

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

通过压缩切片清单,您可以将它们排列成正确的方式。

2

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

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

相关问题