2010-12-09 87 views
-1

我需要一些帮助,请看看编辑2 这是霍夫曼代码:的Python,LEN函数

def printHuffTree(huffTree, prefix = ''): 
    if len(huffTree) == 2: 
     print huffTree[1], prefix 

exampleData = [ 
    (0.124167 , 'e') 
] 


if __name__ == '__main__': 
    huffTree = makeHuffTree(exampleData) 
    printHuffTree(huffTree) 

输出为:

e 00 
t 01 
a 10 
i 11 

我需要一些功能或任何其可以统计这个数字;例如,如果

e 00 

我要统计有多少数字是在这里:2 (0 and 0)

使输出我需要:

e 00 2 
t 01 2 
a 10 2 
i 11 2 
+3

你忘了“家庭作业”标签吗? – 2010-12-09 17:44:23

回答

2

的代码替换的,如果一部分。编辑2:

使用你的数据在exampleData如果c是乘以每个常量,则:

result = sum(c*i[0] for i in exampleData)

我还没有理解你的问题的其余部分。

4

当我明白你的问题,你需要添加len(prefix)到您的最终print

def printHuffTree(huffTree, prefix = ''): 
    if len(huffTree) == 2: 
     print huffTree[1], prefix, len(prefix) 

更新回答新问题

def printHuffTree(huffTree, prefix = '', s=0): 
    if len(huffTree) == 2: 
     print huffTree[1], prefix, len(prefix) 
     return len(prefix)*huffTree[0] 

    else: 
     s+= printHuffTree(huffTree[1], prefix + '0') 
     s+= printHuffTree(huffTree[2], prefix + '1') 
     return s 

你需要测试它

+0

是的工作!但我怎么能现在调用这个数字,我需要乘以这2和0.124167(来自exampleData,为e)。例如:(2 * 0.124167 + 2 * 0.0969225 + 2 * 0.0820011 + 2 * 0.0768052 = ???) – thaking 2010-12-09 17:47:17

+0

@thaking`len`返回一个整数,所以你可以乘以它:`length = LEN(前缀);打印huffTree [1],前缀,长度,长度* 0.124167` – khachik 2010-12-09 17:49:16

0

我想你已经回答了你自己的问题?只需将print huffTree[1], prefix更改为print huffTree[1], prefix, len(prefix)即可。

0

if len(huffTree) == 2: 
     print huffTree[1], prefix, len(prefix)