2016-08-23 8 views
0

を使用して、私のPythonコードです:python、list compare、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は使用しませんでした.2つのinout引数はタプルのリストにすぎません。

この問題を解決できますか?

ありがとうございました。

更新:皆様のご協力ありがとうございます。リストnodes_group内のいくつかのデータ(タプルではない)はnumpy配列からのものです。しかし、私は新しいリストにデータを保存します。そこで、type()を使用して新しいリストの要素のデータ型を調べましたが、型がnumpy.float64であることがわかりました。だから私はint()を使うだけで、リスト内の要素のタイプをnumpy.float64からintに変更するループを書いています。だから問題は解決される。しかし、誰かがより良い解決法であるか、それとももっと無法な方法であるかは誰にでも分かりますか?ありがとう。

+0

上記のコードはbugなしでrepl.itで実行できます。これは私が理解していない別のものです。 –

+0

あなたのコードに 'a in nodes_group'はありません。正しい行で更新してください。 –

+0

@AkshatMahajanありがとうございます。私はすでにタイプミスを変更しました。 –

答えて

1

nodes_groupリストの値のうちの1つ(またはそれ以上)は、numpyの配列です。例のデータに表示されているような浮動小数点数またはタプルではありません。 aが配列の場合は、配列==の演算子はboolの値ではなく、ブール値の配列を返すため、テストa in some_listを使用することはできません。 Boolean配列は、Pythonがそれを単一のboolに変換しようとしたときに表示される例外を発生させます。

+0

あなたの答えをありがとう。私は今それを理解する。しかし、nodes_groupに配列はありません。 3つの '0.0'は配列Aからのものですが、それらをnodes_groupリストに格納します。配列Aは 'A = np.zeros((10,10))'のようなものです。 3つの「0.0」が浮動小数点ではなく配列であることを意味しますか? –

関連する問題