【发布时间】:2021-04-28 13:06:33
【问题描述】:
import sys
from queue import PriorityQueue
class Node(object):
def __init__(self, data = None):
self.value = data
self.right = None
self.left = None
class Huffman():
def __init__(self, data):
self.data = data
def encoding(self):
my_dict = {}
for i in self.data:
my_dict[i] = my_dict.get(i, 0)+1
q = PriorityQueue()
for i, j in my_dict.items():
q.put((j,i))
while q.qsize() >= 2:
val_1 = q.get()
val_2 = q.get()
new_node_1 = Node(val_1[0]+val_2[0])
if isinstance(val_1[1], str):
new_node_1.left = val_1[1]
else:
new_node_1.left = val_1[1]
if isinstance(val_2[1], str):
new_node_1.right = val_2[1]
else:
new_node_1.right = val_2[1]
q.put((new_node_1.value, new_node_1))
在此,我在 while 循环 中遇到错误,经过几次操作后,它无法使用方法 q.get() 或 q。放()。
例如,Huffman('AADCIDCVUSHDUSHUSAHDIADHIAD').encoding()
我不想更改整个代码,而只想更改优先级,以便它仅根据第一个元素(整数)对条目进行优先级。
【问题讨论】:
-
您在接受字符串的优先级队列中添加一个节点。这就是问题所在。我真的不知道您是否可以在不更改代码的情况下修复它。
-
@LucasBelfanti 我可以在不是问题的优先队列中添加一个节点。当它尝试将 Node 与字符串进行比较以确定优先级时,就会出现问题。因此,它给出了比较是不可能的。此外,从 python 的文档中,我们可以发现两个不同类之间的比较是不可能的。我的论点是优先级 que 的容器允许 Node 但比较运算符正在阻止它。例如,我的优先级队列包括整数和字符串,而不仅仅是字符串。谢谢!
标签: python class typeerror priority-queue huffman-code