0

我不断收到这个错误'list' object has no attribute 'priority',我不知道如何解决它。

这是我的代码的一部分,我无法将其全部显示为我的项目:

    def Tree(self):

    while len(self.heap) > 0:
        leftChild= self.heap.pop(0)
        rightChild= self.heap.pop(0)
        a = leftChild.priority + rightChild.priority
        parent = [(leftChild.item + rightChild.item, a)]
        print parent
        #self.heap.insert(0, parent)
    #return self.heap[0]

所以基本上我有一个优先队列列表,我将每个元素传递给一个列表堆。然后我通过 pop 取出每个项目,并且每个项目都leftChild应该rightChild有,例如:[("c", 0.1231)]它运行良好并打印父项,直到我运行显示错误消息的插入函数。有人知道我做错了什么吗?

4

1 回答 1

1

如果它抱怨一个列表没有priority属性,那么可以肯定的是,从堆中出来的(leftChild例如进入)是一个列表,而不是某种“节点”。

确保将原始列表中的这些节点插入到堆中,例如:

self.heap.insert (myList[4])     # an item in the list

而不是:

self.heap.insert (myList[4:5])   # a sublist of the list.

您可以尝试打印type(leftChild)以找出它的实际类型,根据以下记录:

$ python
Python 2.6.5 (r265:79063, Jun 12 2010, 17:07:01)
[GCC 4.3.4 20090804 (release) 1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> x = [1,2,3,4,5,6,7]

>>> x1 = x[4]

>>> x2 = x[4:5]

>>> x1
5

>>> x2
[5]

>>> type(x1)
<type 'int'>

>>> type(x2)
<type 'list'>
于 2013-04-26T04:26:14.160 回答