2013-04-26 107 views
0

我不斷收到此錯誤'list' object has no attribute 'priority',我不知道如何解決它。Python得到奇怪的錯誤

這裏是我的代碼的一部分,我不能在這裏展示這一切爲我的項目:

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] 

所以基本上我有一個優先級隊列列表,我經過的每個元素堆是一個列表。然後我彈出每個項目,每個leftChildrightChild應該有,例如:[("c", 0.1231)]它運行良好,並打印父級,直到我運行顯示錯誤消息的插入功能。任何人都知道我做錯了什麼?

+0

'left'或'leftChild'?你真的需要打定主意。 – paxdiablo 2013-04-26 04:21:33

+0

其leftchild和rightchild – 2013-04-26 04:22:57

+1

'leftChild'和'rightChild'從哪裏來? – mgilson 2013-04-26 04:23:02

回答

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'> 
+0

,但我不明白爲什麼它打印第一個父母,然後它說錯誤。所以在父母leftChild.priority工作,但不是在插入功能? – 2013-04-26 04:31:44

+0

當我在這裏輸入它出來 2013-04-26 04:35:17

+0

@TommyNgo,那麼,你有它。堆中的東西是列表而不是「節點」。你需要找到插入它們並修復它的代碼。 – paxdiablo 2013-04-26 04:44:27