【发布时间】:2022-06-29 20:33:29
【问题描述】:
我正在深入研究 OOP 并学习魔法(或 dunder)技术。 Python 3.8.8。
我使用 pop() 方法创建了类 FreqStack(),该方法删除最频繁的元素并返回更新的堆栈。
class FreqStack():
def __init__(self, lst:list = None):
if lst is None:
self.stack = []
else:
self.stack = lst[::-1]
def push(self, el: int):
self.stack.insert(0, el)
return self.stack
def pop(self):
if len(self.stack) != 0:
hash_map = {}
for el in self.stack:
hash_map[el] = hash_map.get(el, 0) + 1
most_freq_el = max(hash_map, key=hash_map.get)
while most_freq_el in self.stack:
self.stack.remove(most_freq_el)
return self.stack
else:
return 'Stack is empty!'
def __str__(self):
return '\n|\n'.join(str(el) for el in self.stack)
我还添加了 dunder 方法 str(),据我正确理解,该方法在调用 print() 函数时必须返回自定义字符串。 但是,下面示例中的 print() 函数不是返回字符串,而是返回一个列表。
lst = [1, 1, 1, 5, 5, 5, 3, 3, 3, 7, 7, 9]
freq_stack = FreqStack(lst)
for i in range(6):
print(freq_stack.pop())
Output:
[9, 7, 7, 5, 5, 5, 1, 1, 1]
[9, 7, 7, 1, 1, 1]
[9, 7, 7]
[9]
[]
Stack is empty!
我搜索了与此问题相关的所有内容,但无法解决。我做错了什么?
【问题讨论】:
-
你永远不会在你的 FreqStack 对象上调用 print。
-
因为你不是
print你的freq_stack但无论它的.pop()方法返回什么,所以self.stack这是一个列表。 -
另外,打印函数不返回列表。也不是一串。就此而言,它不会返回任何东西。它将一些字符输出到标准输出。