我正在深入OOP并学习魔术(或灌篮)技术。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!
我在谷歌上搜索了与这个问题相关的所有内容,但都无法解决。我做错了什么?
您打印的是pop
的返回值,而不是freq_stack
本身。__str__
方法适用于freq_stack
对象,因此您可以尝试以下方法:
freq_stack.pop()
print(freq_stack)