itertools.combinations
リストの可能なすべての組み合わせに一致させるために使用しています。
私のリストは次のようになります
[[1,2],[2,3],[3,4],[4,5],[5,6]]
すべての組み合わせを取得する方法は理解していますが、各組み合わせで距離式を使用したい場合、どうすればよいでしょうか?
この問題で個々の組み合わせを使用する方法がわかりません。
itertools.combinations
リストの可能なすべての組み合わせに一致させるために使用しています。
私のリストは次のようになります
[[1,2],[2,3],[3,4],[4,5],[5,6]]
すべての組み合わせを取得する方法は理解していますが、各組み合わせで距離式を使用したい場合、どうすればよいでしょうか?
この問題で個々の組み合わせを使用する方法がわかりません。
combinations()
関数の出力をループするだけです。
for xy1, xy2 in combinations(inputlist, 2):
distance = calculate_distance(xy1, xy2)
これはタプルのアンパックを使用します。combinations
それぞれ 2 つの項目のタプルを生成し、Python はこれらを 2 つの名前に割り当てます。生成される最初の組み合わせは です([1, 2], [2, 3])
が、ループはこれらをそれぞれxy1
(set to[1, 2]
およびxy2
(set to [2, 3]
) に割り当てます。
印刷するだけの簡単なデモ:
>>> from itertools import combinations
>>> inputlist = [[1,2],[2,3],[3,4],[4,5],[5,6]]
>>> for xy1, xy2 in combinations(inputlist, 2):
... print(xy1, xy2)
...
[1, 2] [2, 3]
[1, 2] [3, 4]
[1, 2] [4, 5]
[1, 2] [5, 6]
[2, 3] [3, 4]
[2, 3] [4, 5]
[2, 3] [5, 6]
[3, 4] [4, 5]
[3, 4] [5, 6]
[4, 5] [5, 6]
組み合わせを繰り返すだけ
def calculate_distance(points):
[[x1, y1], [x2, y2]] = points
return sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
inputlist = [[1,2],[2,3],[3,4],[4,5],[5,6]]
distances = [calculate_distance(points) for points in combinations(inputlist, 2)]
後でこのデータに意味のある方法でアクセスできるようにしたいと仮定すると、辞書の理解を提案するかもしれません。Martjin のソリューションに似ていますが、コンテキストが少し追加されています。
distance = {tuple(combo): distance(combo) for combo in combinations(inputlist, 2)}
タプル キャストの理由は、ディクショナリのキーが不変であることを確認するためです。
何を探しているのか正確にはわかりませんが、距離方程式の可能性は次のようになります。
def distance(combo):
return math.sqrt(combo[0]**2+combo[1]**2)