2015-11-04 35 views
0

該代碼塊取得一個列表(從csv文件創建)並試圖對其進行組織。我知道它看起來非常混亂,我在學校編了幾個月的編碼。比較列表的最後一個索引以便操作具有該索引的變量

無論如何,代碼[c]指數的第一指標的前7個字符相比較(因爲我必須去通過所有2500+列表在此列表中)。如果它們是相同的,我會對這些變量做一些數學計算。

除了數據的最終分組外,它全部工作。由於[c+1]while c <len(dataList),我得到「索引超出範圍」或沿着這些行的東西,這就是爲什麼我在while語句中添加了+1的原因。

底部的if-else語句對我的代碼沒有影響我不認爲,但那是我在解決這個問題的嘗試。請解釋我如何清理這些代碼。謝謝!

while c+1 < len(dataList): 
    if dataList[c][0][0:7] == dataList[c+1][0][0:7]: 
     totalVolume += float(dataList[c][5]) 
     volClose += (float(dataList[c][5]) * float(dataList[c][4])) 
     c +=1 
    else: 
     volClose += (float(dataList[c][5]) * float(dataList[c][4])) 
     totalVolume += float(dataList[c][5]) 
     avgPrice = volClose/totalVolume 
     averageList.append((dataList[c][0][0:7], avgPrice)) 
     c +=1 

     count += 1 
     volClose = 0 
     totalVolume = 0 
     avgPrice = 0    

if c == len(dataList): 
    if dataList[c][0][0:7] == dataList[c+1][0][0:7]: 
     totalVolume += float(dataList[c][5]) 
     volClose += (float(dataList[c][5]) * float(dataList[c][4])) 
     c +=1 
    else: 
     volClose += (float(dataList[c][5]) * float(dataList[c][4])) 
     totalVolume += float(dataList[c][5]) 
     avgPrice = volClose/totalVolume 
     averageList.append((dataList[c][0][0:7], avgPrice)) 
     c +=1   


return averageList 
+0

如果比較長度爲n的列表中的連續元素,通常要麼進行n-1次比較,要麼通過將最後一個元素與最前面的元素進行比較來進行n次比較(即, )。這是你的意圖嗎? – zehnpaard

+0

我可以將它與第一個元素進行比較,但我不確定如何循環以獲取第一個元素。第一個和最後一個元素不相等。 – Brett

回答

0

Python開始從0開始計數,因此您無法轉到等於列表長度的索引。例如,像['a', 'b', 'c']這樣的列表長度爲3,索引爲0,1和2.這就是爲什麼會出現錯誤。

+0

有沒有解決這個問題的方法?根本沒有改變名單? – Brett

+0

這不是一個問題,只是一個約定。因此,要循環訪問我給出的列表,您只需從i = 0開始,並在i == 2時結束。換句話說,雖然我小於列表的長度,即3. – BlivetWidget

+0

請嘗試使用len(lst) - 1 – AceLearn