【发布时间】:2014-12-02 09:44:55
【问题描述】:
对于分配,我们必须使用来自未提供给我们的城市列表中的地理定位器代码来执行旅行推销员类型的代码,假设列表中的第一个城市是开始/结束城市。
我的代码不完整,但几乎没有,因为我认为我剩下要做的就是从倒数第二个城市到最初的城市。
无论如何,在尝试获取列表中两个城市之间的距离时,我一直遇到“列表索引超出范围”的问题。
我认为我已经为可能将我的索引超出范围的所有内容都做了一个 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()
请帮我stackoverflow,你是我唯一的希望
编辑: Traceback,并删掉一些不必要的代码:
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
【问题讨论】:
-
请将您的代码缩减为minimal example 并提供完整的错误回溯。
-
请告诉我们(通过在调试器中运行,或者只是添加一堆
print调用)cityat、p和citylist中的内容,并验证它是此代码中的两个直接[]表达式,而不是您调用的引发异常的函数之一。 -
与此同时,您正在到处使用
int(p)。p是什么类型?看起来它首先应该是int,这意味着这些调用是不必要的。但是如果它们是必要的,那么问题很可能与p的任何类型有关,可能是它的__index__方法或其他东西。 -
另外,你有像
distancebetweencities = distancebetweencities和p = p这样的行到处都是,这不可能做任何事情。它们是干什么用的?如果不清楚你的代码应该做什么,就很难修复它来完成它应该做的事情……
标签: python list indexing range out