0
我必須使用鄰接列表或矩陣創建圖形,幷包括添加頂點和邊的函數。然而,我仍然在同一行中收到不同的錯誤。 我得到這個錯誤在類型錯誤:列表索引必須是整數,而不是元組
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()))
我想你只是想返回self.Edge。 – jasonharper
你打算通過調用[()]從列表中取回什麼?如果你想創建一個新的重複列表,返回列表(self.Edge)或返回self.Edge [:]因爲你不修改它,jasonharper的更好。無關的註釋 - Graph.AddEdge實際上並不添加邊。 –
謝謝你們。而且我知道這不是這個圖表的唯一問題,它只是我現在堅持的一個問題。我從來沒有這樣做過,所以我正在努力一點。你知道我需要做什麼才能讓Graph.AddEdge實際添加一個節點嗎?我刪除了我認爲我需要的線路,現在我不能爲了我的生活而記住它。 –