0

itertools.combinationsリストの可能なすべての組み合わせに一致させるために使用しています。

私のリストは次のようになります

[[1,2],[2,3],[3,4],[4,5],[5,6]]

すべての組み合わせを取得する方法は理解していますが、各組み合わせで距離式を使用したい場合、どうすればよいでしょうか?

この問題で個々の組み合わせを使用する方法がわかりません。

4

3 に答える 3

0

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]
于 2013-10-30T19:07:59.610 に答える
0

組み合わせを繰り返すだけ

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)]
于 2013-10-30T19:11:28.943 に答える
0

後でこのデータに意味のある方法でアクセスできるようにしたいと仮定すると、辞書の理解を提案するかもしれません。Martjin のソリューションに似ていますが、コンテキストが少し追加されています。

distance = {tuple(combo): distance(combo) for combo in combinations(inputlist, 2)}

タプル キャストの理由は、ディクショナリのキーが不変であることを確認するためです。

何を探しているのか正確にはわかりませんが、距離方程式の可能性は次のようになります。

def distance(combo):
    return math.sqrt(combo[0]**2+combo[1]**2)
于 2013-10-30T19:12:03.693 に答える