0

非常に紛らわしく聞こえる場合は申し訳ありませんが、基本的には 2D 座標のリストを格納する 2 列の配列があります。

array([[ 0.31730234,  0.73662906],
   [ 0.54488759,  0.09462212],
   [ 0.07500703,  0.36148366],
   [ 0.33200281,  0.04550565],
   [ 0.3420866 ,  0.9425797 ],
   [ 0.36115391,  0.16670599],
   [ 0.95586938,  0.52599398],
   [ 0.13707665,  0.6574444 ],
   [ 0.77766138,  0.56875582],
   [ 0.79618595,  0.7139309 ]])

私は辞書のリストを持っています。これらの辞書のそれぞれには、「座標」と呼ばれるキーの下にこれらの座標のランダムな組み合わせのリストがあります。

座標のランダムなセットが与えられた場合、これらの座標がいずれかの辞書に存在するかどうかをチェックし、存在する辞書のインデックスを返す関数を作成するにはどうすればよいですか?

明らかに、引数は辞書のリスト (実際には辞書の複数のリストを持っているため) と配列内の座標 ID です。any 関数、enumerate、find で何かを試すたびに、構文エラーが発生します。例:

def whichcluster(list,coordinate_id):
.....:     for elem in list:
.....:         if any(x in elem['coordinates'] for coordinate_id):
.....:             return list.index(elem)
.....:         else:
.....:             return False

なぜこれが機能しないのですか?

4

2 に答える 2

2

コードに関する 4 つの問題

  • any へのジェネレータ式の供給が間違っています。そのはずany(x in elem['coordinates'] for x in coordinate_id)
  • インデックスを取得するために list.index(elem) を使用する必要はありませんが、ループ中に enumerate 関数を使用して要素 `for index, elem in enumerate(list) でインデックスを取得します。
  • ループ内でリターンを使用するreturn list.index(elem)と、最初のヒットで早期にリターンします。後続の試合を見逃す可能性があります。ジェネレーターを作成する必要があります
  • 変数名に予約済み/ビルド内の名前を使用しないでください。たとえば、の代わりにlist、より適切なものを使用してくださいcoord_list
于 2012-12-28T12:29:16.310 に答える
1

あなたの理解は間違って書かれています。

if any(x in elem['coordinates'] for x in coordinate_id):
    ...

Andlistは型名です。変数名として使用しないでください。

于 2012-12-28T12:09:52.373 に答える