對於分配,假設列表中的第一個城市是開始/結束城市,我們必須使用未列出的城市列表中的geolocator代碼來做一個旅行推銷員的代碼。Python代碼 - 列表索引超出範圍?
我的代碼是不完整的,但幾乎沒有,因爲我認爲我所有要做的就是從第二個到最後一個到最初的城市。
無論如何,我試圖在列表中的兩個城市之間的距離時,不斷遇到「列表索引超出範圍」問題。
我認爲我已經做了一個if/else語句的所有可能推動我的指數超出範圍,但我仍然得到錯誤。我對Python很新,所以請原諒我糟糕的結構/語法。我擁有的進口產品對於這個項目是強制性的,所以請不要再評判。這個錯誤可能真的很愚蠢而且很明顯,但如果是這樣,我很難看到它。
#!/usr/bin/env python
cityfile = open(sys.argv[1], "r")
citylistwithn = cityfile.readlines()
citylist = list(map(lambda each:each.strip('\n'), citylistwithn))
initcity = 0
def main():
p = 0
distancebetweencities = 1
totaldistance = 0
cityat = 0
while len(citylist) >= 1:
currentdistance = vincenty(citycoords(citylist[cityat]), citycoords(citylist[p])).miles
if currentdistance > distancebetweencities:
distancebetweencities = currentdistance
if int(p) < len(citylist)-1:
p += 1
else:
p = p
elif currentdistance < distancebetweencities:
distancebetweencities = distancebetweencities
if int(p) < len(citylist)-1:
p += 1
else:
p = p
elif currentdistance == distancebetweencities:
totaldistance += distancebetweencities
citylist.pop(int(cityat))
if int(p) >= 1:
cityat = int(p) - 1
else:
cityat = int(p)
print(totaldistance)
main()
請幫我計算器,你是我唯一的希望
編輯: 回溯,並削減了一些不必要的代碼:
Traceback (most recent call last):
File "/home/user/assignment6.py", line 43, in <module>
main()
File "/home/user/assignment6.py", line 22, in main
currentdistance = vincenty(citycoords(citylist[cityat]), citycoords(citylist[p])).miles
IndexError: list index out of range
請將您的代碼縮減爲[最小示例](http://stackoverflow.com/help/mcve)並提供完整的錯誤追溯。 – jonrsharpe 2014-10-07 20:48:06
請告訴我們(通過在調試器中運行,或者只是添加一堆'print'調用)'cityat','p'和'citylist'中的內容,並確認它是兩個立即的[]'這個代碼中的表達式並不是你調用引發異常的函數之一。 – abarnert 2014-10-07 21:14:21
同時,你在做'int(p)'到處都是。什麼類型是'p'?它看起來應該首先是一個「int」,這意味着這些調用是不必要的。但是,如果它們是必要的,那麼問題很可能與'p'的類型有關,也可能是'__index__'方法。 – abarnert 2014-10-07 21:15:22