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每个生成两个项目的元组,Python 将它们分配给这两个名称。产生的第一个组合是([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 回答