因此,我正在制作波士顿地铁站的字典及其邻居,以便制定更大的计划。每个站都属于一条线,如蓝色或红色,这些线构成了波士顿的整个地铁系统。但我遇到了麻烦。这是我目前的代码:
for i in range(len(tuples)):
for x in range(len(tuples[i][1])):
print tuples
neighbors=[]
station=tuples[i][1][x]
if tuples[i][1][-1]==station and station not in duplicates:
line=0
for item in tuples:
if station in item[1]:
line=item[0]
break
neighbors.append((tuples[i][1][-2],line))
elif tuples[i][1][0]==station and station not in duplicates:
line=0
for item in tuples:
if station in item[1]:
line=item[0]
break
neighbors.append((tuples[i][1][1],line))
elif station in duplicates:
line=[]
for item in tuples:
if station in item[1]:
line.append((item[0],tuples.index(item)))
neighbors=[(tuples[i][1][x+1],tuples[i][1][x-1],line[0][0]),(tuples[line[1][1]][1][x+1],tuples[line[1][1]][1][x-1],line[1][0])]
else:
line=0
for item in tuples:
if station in item[1]:
line=item[0]
break
neighbors.append((tuples[i][1][x+1],tuples[i][1][x-1],line[0][0]))
for neighbor in neighbors:
subdict[station]={}
for i in range(len(neighbor)-1):
subdict[station].update({neighbor[i]:neighbor[-1]})
所以我运行它并得到语法错误,指示索引超出范围错误。这没有任何意义,但后来我打印出元组中的各个电台和列表,发现它们不断变化。因此,在一次迭代中,一条地铁线路的车站列表与预期相同,但之后则完全不同。只有一条地铁线列表中的第一个站点保持不变;其余的都来自波士顿地铁的不同路线。
那么有人可以告诉我我的代码中发生了什么吗?
答案 0 :(得分:2)
很难说没有示例数据,并且因为您的数据结构乍一看似乎很复杂。
但是有一件事让我怀疑:
x
上重复range(len(tuples[i][1]))
。neighbors=[(tuples[i][1][x+1],...)]
。这可能会引发Index out of bounds
例外。
答案 1 :(得分:2)
我认为你的问题出现在最后几行:
for i in range(len(tuples)):
for x in range(len(tuples[i][1])):
[...]
for neighbor in neighbors:
for i in range(len(neighbor)-1): #<- HERE
[...]
您的外部循环遍历元组索引并将此索引存储在变量i
中。最后的嵌套循环用另一个值覆盖这个变量,这肯定不是你想要的。