2016-10-15 9 views
0

私は、それぞれにいくつかの辞書があるリストのリストを持っています。最初のリストは、三角測量に関わるすべての座標を表します。 2番目のリストは、そのグリッド座標に関連付けられている辞書のリストを表します。リスト内の各辞書は、我々が目標とする三角測量をしようとしている線の点からマンハッタン距離だけ離れた可能なすべての座標を表しています。すべての三角測量リスト内に存在する座標は、これらの位置からの重複ポイント、したがってターゲットの潜在的な位置を表します。リスト内のすべての辞書に存在する値を見つける

とにかく、私はいくつかの理解を加えてほしいと思っています。おそらく混乱するかもしれませんが、何が起きているのかを視覚化するのに役立つデータ構造が含まれています。私はこれらをループしてみましたが、これを効率的に行う方法はまだありませんでした。

誰かが、座標のすべてのグループに存在する座標のリストを生成するいくつかのPythonの魔法を知っていますか?

以下の例では、3つの異なる座標グループから始めています。 3つの座標グループすべてに存在するx、yペアのリストを生成する必要があります。

例:

[ 
    [ 
     {'x': 1, 'y': 0}, 
     {'x': -1, 'y': 0}, 
     {'x': 0, 'y': 1}, 
     {'x': 0, 'y': -1} 
    ], 
    [ 
     {'x': 2, 'y': 0}, 
     {'x': -2, 'y': 0}, 
     {'x': 0, 'y': 2}, 
     {'x': 0, 'y': -2}, 
     {'x': 1, 'y': 1}, 
     {'x': -1, 'y': -1}, 
     {'x': -1, 'y': 1}, 
     {'x': 1, 'y': -1} 
    ], 
    [ 
     {'x': 3, 'y': 0}, 
     {'x': -3, 'y': 0}, 
     {'x': 0, 'y': 3}, 
     {'x': 0, 'y': -3}, 
     {'x': 2, 'y': 1}, 
     {'x': -2, 'y': -1}, 
     {'x': -1, 'y': 2}, 
     {'x': 1, 'y': -2}, 
     {'x': 1, 'y': 2}, 
     {'x': -1, 'y': -2}, 
     {'x': -2, 'y': 1}, 
     {'x': 2, 'y': -1} 
    ] 
] 
+1

各グループについて、座標をPythonセットに入れます。次に、交差点を繰り返し計算します。あなたが探しているコードは、3つすべてのセットにあり、その交差点にもあります。 –

+0

コメントありがとう、ジャック。私は非常に高度なPythonプログラマーではないと付け加えておきます。あなたは簡単な例を説明することができますか? – Catalyst

答えて

2

魔法はありません。あなたはちょっとだけあなたのデータ構造に注意する必要があります。あなたはハッシュ可能ではないディクショナリに座標を入れています。そのため、それらをセットに追加することはできません。タプルを使用する必要があります。したがって、データ構造は次のようになります。

my_list = [ 
    set([ 
     (1, 0), 
     (-1, 0), 
     (0, 1), 
     (0, -1) 
    ]), 
    set([ 
     (1, 0), 
     (-2, 0), 
     (0, 2), 
     (0, -2), 
     (1, 1), 
     (-1, -1), 
     (-1, 1), 
     (1, -1) 
    ]), 
    set([ 
     (1, 0), 
     (-3, 0), 
     (0, 3), 
     (0, -3), 
     (2, 1), 
     (-2, -1), 
     (-1, 2), 
     (1, -2), 
     (1, 2), 
     (-1, -2), 
     (-2, 1), 
     (2, -1) 
    ]) 
] 
common = my_list[0] 
for s2 in my_list[1:]: 
    common = common & s2 

print common 
+0

私は今セットを読んでいます。このスニペットは、別のセットと同じ値を含むセットの1つを変更した場合でも、機能しないようです。 – Catalyst

+0

私が最後にコメントを送ったのは、私が終わった後でした。 my_listに複製セットを作成してから最後に共通の印刷を試みましたが、空のままです – Catalyst

+0

各セットに(1、0)を追加しました。これでコードが印刷されます(1,0)。 "my_listに重複したセットを作成しようとしました"という意味は分かりませんが、コードは元の質問であなたが求めていることを行います。コードが失敗したテストケースを共有してください。 – Shakkhar

関連する問題