You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

为何链表数组输出节点地址而非空节点?如何实现空节点输出?

解决打印Node列表显示内存地址而非期望字符串列表的问题

嘿,我完全懂你现在的困惑!你打印x.getMake()时看到的是一堆类似<__main__.Node object at 0x...>的内容,而不是['','','','','','','',''],核心原因是:

你打印的是**Node类实例的列表**,Python默认会使用对象的__repr__方法来显示它,而这个方法的默认实现就是输出对象的类名和内存地址,不是你想要的节点名称。

下面给你两种简单的解决办法:

方法1:临时提取节点名称(不修改类)

直接遍历列表,调用每个Node对象的getName()方法提取名称,生成新的字符串列表再打印:

x = Linkedlist(8)
# 用列表推导式提取每个节点的name属性
print([node.getName() for node in x.getMake()])

运行这段代码就会输出你期望的['','','','','','','','']

方法2:给Node类添加__repr__方法(长期通用)

如果你希望以后任何时候打印Node对象都能直接显示名称,那可以给Node类添加一个自定义的__repr__方法,覆盖默认的实现:

class Node:
    def __init__(self, Name, Pointer =-1):
        #-1代表空值
        self.__name = Name
        self.__pointer = Pointer
    def getName(self):
        return self.__name
    def getPointer(self):
        return self.__pointer
    def setName(self, Name):
        self.__name = Name
    def setPointer(self, Pointer):
        self.__pointer = Pointer
    # 添加这个方法,自定义对象的字符串表示
    def __repr__(self):
        return repr(self.__name)

class Linkedlist:
    def __init__(self, size):
        self.__Make = [Node('') for i in range (size)]
    def getMake(self):
        return self.__Make

x = Linkedlist(8)
print(x.getMake())  # 现在直接打印就能得到['','','','','','','','']

简单解释下__repr__:这个方法是Python用来生成对象“官方”字符串表示的,当你打印对象或者把对象放在列表里打印时,都会调用它。我们让它返回节点的__name属性的字符串表示,这样就能得到你想要的结果啦。

内容的提问来源于stack exchange,提问作者Spencer Ng

火山引擎 最新活动