2017-03-07 220 views
1

我想在我的3.5 Python环境中运行这个程序,但它给我这个错误: “类型错误:unorderable类型”,在33行:的Python:类型错误:unorderable类型

heappush(tree, (total_prob, x, y)) 

这里该程序

# Native binary tree implementation 
from heapq import heapify, heappop, heappush 

def printCodes(t, code_str = ''): 
    ''' 
    Accept the root node of a 'heapq' tree and print the Huffman codes. 
    This function uses recursion to build the codes strings. 
    ''' 
    if len(t) < 3: 
     print('%s: %s' % (t[1], code_str)) 
    else: 
     printCodes(t[1], code_str + '0') 
     printCodes(t[2], code_str + '1') 

# Initialize the input (data taken from 3.20) 
tree = [ 
    [0.07, 'a'], 
    [0.09, 'b'], 
    [0.12, 'c'], 
    [0.22, 'd'], 
    [0.23, 'e'] 
] 

# Convert the input into a binary tree 
heapify(tree) 

# Sort the tree into a valid Huffman tree. 
# To do this, pop two nodes, then push them back into the tree under a 
# node with the combined total probability 
while len(tree) > 1: 
    x = heappop(tree) 
    y = heappop(tree) 
    total_prob = x[0] + y[0] 
    heappush(tree, (total_prob, x, y)) 

# Output 
printCodes(tree[0]) 

回答

0

这是从列表与元组进行比较。创建像这样的树结构应该解决它:

tree = [ 
    (0.07, 'a'), 
    (0.09, 'b'), 
    (0.12, 'c'), 
    (0.22, 'd'), 
    (0.23, 'e'), 
]