📜  Python – 输入集合之间的距离(1)

📅  最后修改于: 2023-12-03 15:19:06.455000             🧑  作者: Mango

Python – 输入集合之间的距离

有时候需要计算两个集合之间的距离,可以使用Jaccard距离或是Hamming距离等算法。本文将介绍如何使用Python计算输入集合之间的距离。

Jaccard距离

Jaccard距离是通过计算两个集合的交集和并集大小之比来衡量它们的相似性的一种度量方法。

def jaccard_distance(set1, set2):
    intersection = len(set1 & set2)
    union = len(set1 | set2)
    return 1 - intersection / union

上述代码中的函数jaccard_distance接收两个集合作为参数,返回它们之间的Jaccard距离。它首先计算两个集合的交集及并集的大小,然后用并集大小去除它们交集大小的比率,最后将其与1相减得到距离。

Hamming距离

Hamming距离是用于比较两个等长序列之间的距离的一种度量方法。它是通过计算两个序列不同位置上字符的个数来定义的。

def hamming_distance(str1, str2):
    assert len(str1) == len(str2), 'Strings must be of equal length'
    distance = sum(ch1 != ch2 for ch1, ch2 in zip(str1, str2))
    return distance

上述代码中的函数hamming_distance接收两个等长字符串作为参数,返回它们之间的Hamming距离。该函数使用内置函数zip将两个字符串的每个位置配对,然后使用for循环计算它们不同位置上字符的个数。

示例

现在让我们通过一个示例来展示如何使用上述函数计算集合之间的距离。

set1 = set([1, 2, 3, 4, 5])
set2 = set([4, 5, 6, 7, 8])
print(jaccard_distance(set1, set2))

str1 = 'hello'
str2 = 'hallo'
print(hamming_distance(str1, str2))

上述代码将输出以下结果:

0.6
1

第一个结果表示set1set2之间的Jaccard距离为0.6,意味着它们之间的相似程度较低。第二个结果表示str1str2之间的Hamming距离为1,意味着它们相差一个字符。