[英]Adding Nodes to a graph displays object instead of string (adjacency list)
我正在學習如何使用 Python 上的鄰接列表創建圖形。我當前的問題是在嘗試將節點添加到列表時,它在 0x0000 處顯示節點 object.... 而不是字符串。 當我嘗試打印列表時,出現 TypeError: list indices must be integers or slice, not Node”。我似乎無法找到解決此問題的方法。任何幫助將不勝感激!
class Node:
def __init__(self, name):
self.name = name
self.visited = False
self.adjacency = []
def addNeighbor(self, v):
if v not in self.adjacency:
self.adjacency.append(v)
class DGraph:
def __init__(self, size=20):
self.size = size
self.numNodes = 0
self.nodeList = [0] * size
def addNode(self, name):
"""adds new node to graph"""
if self.numNodes >= self.size:
raise OverflowError("Graph Size Exceeded")
newNode = Node(name)
newNode.name = name
newNode.addNeighbor(name)
self.nodeList[self.numNodes] = newNode
self.numNodes += 1
def listNodes(self):
theList = "Nodes: "
for i in self.nodeList:
theList += self.nodeList[i]
theList += ""
return theList
tree = DGraph()
tree.addNode("A")
tree.addNode('C')
tree.addNode('T')
您可以通過實施__repr__
來指定 object 的字符串表示形式 請參閱文檔中的詳細信息和這個問題這是一個工作示例( nodeList
也是固定的)
class Node:
def __init__(self, name):
self.name = name
self.visited = False
self.adjacency = []
def addNeighbor(self, v):
if v not in self.adjacency:
self.adjacency.append(v)
def __repr__(self):
return self.name
def __str__(self):
return self.name
class DGraph:
def __init__(self, size=20):
self.size = size
self.numNodes = 0
self.nodeList = [0] * size
def addNode(self, name):
"""adds new node to graph"""
if self.numNodes >= self.size:
raise OverflowError("Graph Size Exceeded")
newNode = Node(name)
newNode.name = name
newNode.addNeighbor(name)
self.nodeList[self.numNodes] = newNode
self.numNodes += 1
def listNodes(self):
theList = "Nodes: "
for i in self.nodeList:
theList += str(i)
theList += " "
return theList
tree = DGraph()
tree.addNode("A")
tree.addNode('C')
tree.addNode('T')
print(tree.listNodes())
現在調試器將顯示節點名稱(使用__repr__
)
除非您強制節點名稱的唯一性,否則__repr__
的這種實現可能不是一個好主意。
作為旁注,最好遵循Python 中的命名約定
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.