2017-08-30 173 views
-1

我寫的代碼適用於所有值,除了當我將xlookfor設置爲9時,會產生索引錯誤。我已經搞亂了改變索引邊界(改變計數器到計數器= 0)和其他一些事情,但結束了相同的錯誤。我知道這是一個簡單的索引修復,但我無法弄清楚。任何幫助,將不勝感激。for循環中的Python數組索引

firstlist = [1, 3, 5, 6, 7, 8, 9] 
secondlist = [9, 3, 1, 8, 6, 9, 2] 
valuetolookfor = 6 

b = 0 
e = 0 
s = 0 
counter = 1 

    for i in firstlist: 
     counter += 1 
     if i <= valuetolookfor: 
      s = i-1 
      b = firstlist[counter] 
       if b >= valuetolookfor: 
       e = i 
       break 
+2

您應該修復縮進。嚴重縮減的Python代碼是無稽之談。 – khelwood

+0

同意縮進。我認爲你的問題始於'counter = 1',因爲Python數組以0開始。我認爲'counter = 0'是你應該開始的地方。您正在跳過數組的第一個元素,因此無法在其中找到'9':) – RobertB

+0

謝謝大家的意見。我通過Solaxun提供的建議得到了它的工作。我會盡快更新這篇文章。 – user2845180

回答

1

你不需要爲for循環複雜化它。你可以簡單的問題:

xvals = [1, 3, 5, 6, 7, 8, 9] 
yvals = [9, 3, 1, 8, 6, 9, 2] 
xlookfor = 6 
yvals[xvals.index(xlookfor)] 
>> 8 
xlookfor = 9 
yvals[xvals.index(xlookfor)] 
>> 2 
+0

爲什麼選擇downvote工作解決方案? – AK47

1

在您的解決方案,你正在做的是保持b兩步進取,在任何時候都什麼,目前的價值要在xvals迭代,或i你的情況。我假設你想要做的就是保持領先一步,所以這是第一個問題,儘管不是你的索引錯誤的來源。

您的索引錯誤的原因是因爲一旦b看到9,i是之前的兩個步驟,或7.然後您嘗試訪問yvals的第7個位置,這是在它的範圍之外0-6( python中基於零的索引)。

你這樣做:yvals [7],因爲當循環結束時e是7。