【问题标题】:How to get a listNode as a result in python如何在python中获取listNode作为结果
【发布时间】:2021-07-23 10:35:18
【问题描述】:

所以我开始学习python中的listNodes或链表并创建了一个;

class Node:
  def __init__(self, data, next = None):
    self.data = data
    self.next = next


class LinkedNode:
  def __init__(self):
    self.head = None
    self.size = 0

  def add(self, data):
    self.head = Node(data, self.head)
    self.size += 1

它工作正常,但是我怎样才能在 python 中得到一个 listNode 作为这个节点的结果。

我的意思是列表节点看起来像这样;

{val: 'some_val', next: {val: 'other_val', next{...}}}

在 js 中,当我们打印列表节点类的实例时,它会以相同的格式得到结果,但是在 python 中,当我尝试相同时;

ln = LinkedNode()
print(ln)

它给出了这个; ma​​in.LinkedNode 对象位于 0x7fe191576400>

【问题讨论】:

  • 您可以实现类的__str__ 方法以您希望的格式打印对象。那能解决问题吗?或者您正在寻找的不仅仅是打印格式

标签: python dictionary linked-list


【解决方案1】:

有几种方法可以让您的实例打印出更有用的东西。

例如,您可以添加一个生成字典的方法,因为字典以类似于您要求的输出格式打印:

class Node:
    def __init__(self, data, next = None):
        self.data = data
        self.next = next

    def asdict(self):
        return  { "data": self.data, "next": self.next and self.next.asdict() }

所以现在当你这样做时:

print(Node(1).asdict())

...你会得到:

{'data': 1, 'next': None}

当您也将这样的方法添加到LinkedNode 类时:

class LinkedNode:
    def __init__(self):
        self.head = None
        self.size = 0

    def add(self, data):
        self.head = Node(data, self.head)
        self.size += 1

    def asdict(self):
        return self.head and self.head.asdict()

...你可以这样做:

lst = LinkedNode()
lst.add(1)
lst.add(2)

print(lst.asdict())

这将输出:

{'data': 2, 'next': {'data': 1, 'next': None}}

最后,如果您希望此输出成为 print 在您执行 print(lst) 时将使用的默认值,则在类上定义 __repr__(或 __str__):

class LinkedNode:
    def __init__(self):
        self.head = None
        self.size = 0

    def add(self, data):
        self.head = Node(data, self.head)
        self.size += 1

    def asdict(self):
        return self.head and self.head.asdict()

    def __repr__(self):
        return repr(self.asdict())

现在您可以在不显式调用.asdict() 的情况下执行print(lst),并获得相同的输出。

【讨论】:

  • 虽然这返回的东西与我想要的非常相似,但那不是 ListNode 类型
  • 你是如何检查类型的?
  • 我想我明白了。将您的问题标记为已接受。
  • 通常在 LeetCode 中,您获取数据作为预定义类的实例,并且您应该返回该类的实例。不涉及打印。如果你对特定的 LeetCode 分配有疑问,并且在让你的解决方案被接受方面遇到问题,我建议你提出一个新的问题,提供你的代码、预期的输出以及你得到的结果。
  • 感谢您的帮助。顺便说一句,我解决了。另外因为我不知道,这就是为什么我没有发布 leetcode 问题
猜你喜欢
  • 2020-12-03
  • 1970-01-01
  • 2014-03-12
  • 1970-01-01
  • 2020-08-28
  • 2020-08-15
  • 2013-10-04
  • 2016-05-12
  • 2020-09-04
相关资源
最近更新 更多