首页 > 解决方案 > 从元组列表中减去元组列表

问题描述

我有 2 个数据集,一个有 40 个案例,另一个只有 20 个。为了便于解释,我制作了一个小得多的版本。

dataset1 = [(1.5, 2.4), (-7.9, 3.5), (6.3, 6.2), (8.3, 4.1), (4.1, 4.2)]
dataset2 = [(2.9, 3.0), (4.3, 2.9)]

该程序的思路是计算dataset2[0] (2.9, 3.0)中的点到dataset1中所有点的欧几里得距离,然后对dataset2[1] (4.3, 2.9)进行同样的处理,比较所有点在数据集 1 中。

我想使用我自己的编码来创建这个程序,而不是导入外部包。我尝试了以下两个公式:

尝试 1(给出 TypeError: unsupported operand type for -: 'tuple' and 'tuple'):

def distance_calculate(dataset1, dataset2):
    distance = 0
    for i in range(len(point1)):
        # subtracting x-coord then summing with difference of y-coord
        distance += (dataset1[i] - dataset2[i])**2
    return distance**0.5

尝试 2(给出 IndexError: list index out of range):

def distance_calculate(dataset1, dataset2):
    distance = 0
    for i in range(len(dataset1)):
        # selecting 0th coordinate for both datasets, and 1st coordinate for both datasets
        distance += (dataset1[i][0] - dataset2[i][0])**2 + (dataset1[i][1] - dataset2[i][1])**2
    return distance**0.5

任何帮助将不胜感激,无论是调整上述方法还是我完全遗漏了一些东西!

谢谢!

标签: python

解决方案


你还没有告诉我们输出应该是什么样子。这是一个使用map()将值作为列表列表返回的版本:

dataset1 = [(1.5, 2.4), (-7.9, 3.5), (6.3, 6.2), (8.3, 4.1), (4.1, 4.2)]
dataset2 = [(2.9, 3.0), (4.3, 2.9)]


def distance(p1, p2):
    return (p1[0] - p2[0])**2 + (p1[1] - p2[1])**2


def subtract(d1, d2):
    return list(map(
        lambda p1: list(map(
            lambda p2: distance(p1, p2),
            d2
        )),
        d1
    ))


print(subtract(dataset1, dataset2))

和(美化的)结果:

[
   [2.32, 8.09],
   [116.89000000000001, 149.2],
   [21.8, 14.890000000000002]
   [30.370000000000005, 17.440000000000005],
   [2.88, 1.7300000000000006]
]

如果您想要其他形状,请翻转地图顺序。


推荐阅读