gpt4 book ai didi

python - 如何重载 __repr__ 方法以显示链表堆栈中的所有项目?

转载 作者:行者123 更新时间:2023-12-04 14:02:42 24 4
gpt4 key购买 nike

我已经创建了我的 Node 和 Stack 类,但我不知道如何在 Stack 类中显示 repr 以便能够打印堆栈中当前的所有项目?我一直在尝试连接节点,但我不确定如何连接,因为 Stack() 不允许像列表那样进行迭代?

堆栈正常工作,我只是不知道如何显示它的内容?

这是我的代码:

class Stack:
class Node:
def __init__(self, elem, next):
self.elem = elem
self.next = next

def __repr__(self):
return str(self.elem)

def __init__(self):
self._stack = None
self._size = 0


def __repr__(self):
# *Not sure how to implement this properly*
s = ''
for i in range(self._size):
last = self._stack.elem
s += (str(last))+ ', '
self._stack.elem = self._stack.next
return

def push(self, elem):
if self._stack == None:
self._stack = self.Node(elem, None)
self._size += 1
else:
self._stack = self.Node(elem, self._stack)
self._size += 1

def pop(self):
if self._stack == None:
raise Exception ('This Stack is empty!')
else:
last = self._stack.elem
self._stack = self._stack.next
self._size -= 1
return last

def top(self):
return self._stack.elem

def isEmpty(self):
return self._size == 0

例子:

s= Stack()
s.push(4)
s.push(9)
s.push("joe")
s
joe, 9, 9,

提前谢谢你。

最佳答案

一种更简单的实现方式,可以避免您的解决方案的所有问题和陷阱:

from typing import Iterable, Any


class Stack:
def __init__(self, xs: Iterable = None):
self._items = [] if xs is None else list(xs)

def push(self, elem: Any):
self._items.append(elem)

def pop(self) -> Any:
return self._items.pop()

def top(self) -> Any:
return self._items[-1]

def isEmpty(self) -> bool:
return not self._items

def __repr__(self) -> str:
typename = type(self).__name__
return f'{typename}({self._items})'

def __str__(self) -> str:
return ', '.join(str(x) for x in self._items)


s = Stack()
s.push(4)
s.push(9)
s.push("joe")
print(s)
print(repr(s))

但请注意,与仅使用像堆栈一样的列表开始,像这样的类几乎没有用处。

输出:

4, 9, joe
Stack([4, 9, 'joe'])

请注意,这在末尾有顶部元素,如果您愿意,当然可以反转它。

如果您坚持为您的特定实现使用 __repr__,按照您的意图以非标准方式使用 __repr__,那么这样的事情会起作用:

    def __repr__(self):
p = self._stack
elems = []
while p is not None:
elems.append(p.elem)
p = p.next
return ', '.join(elems)

但请注意,除了这不是正确的 __repr__ 之外,您的实现还有其他几个问题,正如之前在此处和评论中指出的那样。您的“节点”有一个 __repr__ ,它只返回其元素值(在大多数情况下根本不是有效表示);你似乎在使用 __repr__ 而你真正追求的是 __str__

如果这是编程课上的作业,我不确定我是否会给予及格分数,具体取决于目标是什么。

关于python - 如何重载 __repr__ 方法以显示链表堆栈中的所有项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69473983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com