2017-11-11 110 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」

如果您再次看到「列表索引超出範圍」錯誤,我會檢查以確保您沒有意外編寫代碼以引用超出列表的範圍。

相關問題