2016-08-23 49 views
0

這裏是我的Python代碼:python,list比較,ValueError:具有多個元素的數組的真值是不明確的。使用a.any()或a.all()

def ava_check(nodes_group,child_list): 
    ava_list=nodes_group[:] 

    if nodes_group[1] in child_list: 
     return None 
    else: 
     for a in nodes_group: 
      if a in child_list: 
       ava_list.remove(a) 
       ava_list.remove(nodes_group[nodes_group.index(a)-1]) 
      else: 
       pass 

nodes_group就像[0.0, (0, 3), 0.0, (0, 2), 0.0, (1, 3)]列表。 child_list是一個像[(0, 1)]列表。

但是當我運行代碼時,有一個錯誤:ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()發生在行if a in child_list:。我不知道這裏有什麼問題。我試圖搜索,但他們說了一些關於numpy的內容。但是我沒有在這裏使用numpy,這兩個inout參數都是用元組列表的。

你能幫我解決這個問題嗎?

非常感謝。

更新:感謝大家的解決方案。列表nodes_group中的一些數據(不是元組)來自numpy陣列。但我將數據存儲在新列表中。所以我使用type()檢查了新列表中元素的數據類型,並且我發現該類型爲numpy.float64,這解釋了爲什麼出現此錯誤。所以我寫了一個循環來改變列表中元素的類型從numpy.float64到int,只需使用int()。所以問題解決了。但是,任何人都知道是更好的解決方案還是更pythonic的方式?謝謝。

+0

上面的代碼可以在沒有bug的情況下在repl.it上運行。這是我不明白的另一件事。 –

+0

代碼中沒有'如果在nodes_group'中。請用正確的線更新。 –

+0

@AkshatMahajan謝謝。我已經改變了錯字。 –

回答

1

nodes_group列表中的一個(或多個)值是numpy數組,而不是像您在示例數據中顯示的浮點數或元組。如果a是數組,則不能使用測試a in some_list,因爲數組的==運算符不返回bool值,而是返回一個布爾數組。當Python嘗試將它轉換爲單一的bool時,布爾數組引發異常。

+0

感謝您的回答。我現在明白了。但是nodes_group中沒有數組。這三個'0.0'來自數組A,但我將它們存儲在列表nodes_group中。數組A就像'A = np.zeros((10,10))'。這是否意味着所有的三個'0.0'不是浮動的,而是數組? –

相關問題