在搜索树时出错

时间:2013-10-16 10:18:18

标签: python data-structures typeerror

我需要通过检查节点中的分支总和是否大于零来搜索树。但是,我遇到了总和的问题 - 我在

上得到了一个类型错误(int对象不可调用)
branch_sum = [t[0] for t in current] 

线。我以为是因为最终我会得到一个节点

current = [[1,'b']]

(例如),所以我添加了if / else语句。即我以为我试图总结一下这样的东西:

first = [1]

然而,问题仍然存在。我不确定导致这种情况的原因。

作为参考,current是列表列表,第一个插槽是节点数据,第二个插槽是节点id(在内部列表中)。 group()函数根据子节点的id对节点上的数据进行分组(左子节点的id以1开头,右边的id以0开头)。

我正在搜索的树存储为列表,如:

tree = [[0, '1'], [1,'01'], [0,'001']]

即。这是一套霍夫曼代码。

from collections import deque 

def group(items):
    right = [[item[0],item[1][1:]] for item in items if item[1].startswith('1')]
    left  = [[item[0],item[1][1:]] for item in items if item[1].startswith('0')]

    return left, right

def search(node):
    loops = 0
    to_crawl = deque(group(node))
    while to_crawl:
        current = to_crawl.popleft() # this is the left branch of the tree
        branch_sum = 0
        if len(current)==1:
            branch_sum = sum([t for t in current])
        else: 
            branch_sum = sum([t[0] for t in current])
        if branch_sum !=0 :
            l,r = group(current)
            to_crawl.extendleft(r)
            to_crawl.extendleft(l)
        loops += 1
    return loops

这是我正在尝试做的事情:

一棵树,有很多数据为0,找到1.要做到这一点,将树分成两个分支(通过group()函数)并按下deque。从双端队列中弹出一个分支,然后对分支中的数据求和。如果总和不为零,则将分支拆分为两个子分支,将子分支推入双端子。继续这样做,直到我找到非零数据。当我退出时,我应该在双端队列中以[1,'101']的形式结束。

1 个答案:

答案 0 :(得分:3)

我强烈认为错误是

TypeError: 'int' object is not iterable

因为你最终将{2}元组作为node传递给

to_crawl = deque(group(node))

给你一个2元素的双端队列。然后

current = to_crawl.popleft()

current提供单个元素(整数)。这显然是不可迭代的,这会导致给定的错误。

旁注:为简洁起见,您可以使用这样的总和

sum(current)

而不是

sum([x for x in current])