类型错误:列表索引必须是整数,而不是元组
问题描述:
我必须使用邻接列表或矩阵创建图形,并包括添加顶点和边的函数。然而,我仍然在同一行中收到不同的错误。 我得到这个错误在类型错误:列表索引必须是整数,而不是元组
def getConnection(self):
return self.Edge[()]
这正是我与它显示的那样。我试过
return self.Edge()
和
return self.Edge[]
,但我发现其他类型的错误,而不是。我需要在这里更改什么?
#Graph for Reference and use in BFS and DFS
graph = {'0': ['2'],
'1': ['3', '0'],
'2': ['3', '4'],
'3': ['2', '4', '5'],
'4': ['5', '6'],
'5': ['6', '7'],
'6': ['7', '8'],
'7': ['8', '9'],
'8': ['9', '0'],
'9': ['0', '5'] }
class Vertex:
def __init__(self, Label, Edge):
self.Label = 0
self.Edge = []
def AddNeighbour(self, neighbour, weight=0):
self.Connection[neighbour] = weight
def __str__(self):
return str(self.Label) + ' connected to: ' + str([i.Label for i in self.Edge])
def getConnection(self):
return self.Edge[()]
def getLabel(self):
return self.Label
class Graph:
def __init__(self):
self.VertexList = {}
self.NumVertices = 0
def AddVertex(self, Label):
self.NumVertices = self.NumVertices + 1
NewVertex = Vertex(Label, None)
self.VertexList[Label] = NewVertex
return NewVertex
def GetVertex(self,n):
if n in self.VertexList:
return self.VertexList[n]
else:
return None
def __contains__(self,n):
return n in self.VertexList
def AddNeighbour(self, neighbour, weight=0):
self.Connection[neighbour] = weight
def AddEdge(self,f,t,cost=0):
if f not in self.VertexList:
NewVertex = self.AddVertex(f)
if t not in self.VertexList:
NewVertex = self.AddVertex(t)
def GetVertices(self):
return self.VertexList.Label()
def __iter__(self):
return iter(self.VertexList.values())
g = Graph()
for i in range(10):
g.AddVertex(i)
g.VertexList
g.AddEdge(0,2,0)
g.AddEdge(0,3,0)
g.AddEdge(1,3,0)
g.AddEdge(1,0,0)
g.AddEdge(2,3,0)
g.AddEdge(2,4,0)
g.AddEdge(3,2,0)
g.AddEdge(3,4,0)
g.AddEdge(3,5,0)
g.AddEdge(4,5,0)
g.AddEdge(4,6,0)
g.AddEdge(5,6,0)
g.AddEdge(5,7,0)
g.AddEdge(6,7,0)
g.AddEdge(6,8,0)
g.AddEdge(7,8,0)
g.AddEdge(7,9,0)
g.AddEdge(8,9,0)
g.AddEdge(8,0,0)
g.AddEdge(9,0,0)
g.AddEdge(9,5,0)
for v in g:
for w in v.getConnection():
print("(%s , %s)" % (v.getLabel(), w.getLabel()))
答
自定义边缘的列表,你可以返回:
- 列表本身:
return self.Edge
- 列表的副本:
return self.Edge[:]
- 列表中的一个元素:
return self.Edge[i]
- 列表中的一部分:
return self.Edge[i:j]
当然,在最后两种情况下,您必须分别定义和初始化i和j。如果不使用,它们将分别表示列表的开始和结束(即self.Egde[:j]
会返回一个直到位置j的所有元素的列表)。在这个主题上可能有很多变体:最后一个元素,两个元素,...
我想你只是想返回self.Edge。 – jasonharper
你打算通过调用[()]从列表中取回什么?如果你想创建一个新的重复列表,返回列表(self.Edge)或返回self.Edge [:]因为你不修改它,jasonharper的更好。无关的注释 - Graph.AddEdge实际上并不添加边。 –
谢谢你们。而且我知道这不是这个图表的唯一问题,它只是我现在坚持的一个问题。我从来没有这样做过,所以我正在努力一点。你知道我需要做什么才能让Graph.AddEdge实际添加一个节点吗?我删除了我认为我需要的线路,现在我不能为了我的生活而记住它。 –