列表内容随每次迭代而变化

时间:2013-06-20 06:32:57

标签: python

因此,我正在制作波士顿地铁站的字典及其邻居,以便制定更大的计划。每个站都属于一条线,如蓝色或红色,这些线构成了波士顿的整个地铁系统。但我遇到了麻烦。这是我目前的代码:

 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]})

所以我运行它并得到语法错误,指示索引超出范围错误。这没有任何意义,但后来我打印出元组中的各个电台和列表,发现它们不断变化。因此,在一次迭代中,一条地铁线路的车站列表与预期相同,但之后则完全不同。只有一条地铁线列表中的第一个站点保持不变;其余的都来自波士顿地铁的不同路线。

那么有人可以告诉我我的代码中发生了什么吗?

2 个答案:

答案 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中。最后的嵌套循环用另一个值覆盖这个变量,这肯定不是你想要的。