簡體   English   中英

將節點添加到圖形顯示 object 而不是字符串(鄰接列表)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM