python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python计算列表相似度

使用Python计算两个不同列表的相似度

作者:袁袁袁袁满

这篇文章主要介绍了使用Python计算两个不同列表的相似度,Python数据开发工作中的需求两个不同列表给出相似度,本文实现判断数字类型相似度和字符串类型相似度,非常实用,需要的朋友可以参考下

数字类型相似度

可以使用余弦相似度来计算两个列表的相似度。

具体步骤如下:

  1. 将两个列表转化为向量形式,即将列表中的元素作为向量的分量。
  2. 计算向量的点积。
  3. 计算向量的模长。
  4. 计算余弦值。
  5. 将余弦值作为相似度。

Python代码实现:

import math
def cosine_similarity(list1, list2):
    dot_product = sum([list1[i]*list2[i] for i in range(len(list1))])
    norm1 = math.sqrt(sum([x**2 for x in list1]))
    norm2 = math.sqrt(sum([x**2 for x in list2]))
    similarity = dot_product / (norm1 * norm2)
    return similarity
# 示例
list1 = [1, 2, 3, 4, 5]
list2 = [3, 4, 5, 6, 7]
similarity = cosine_similarity(list1, list2)
print(similarity)

输出结果为:

0.9970544855015815

表示两个列表的相似度很高。

字符串类型相似度

可以使用Jaccard相似度来计算两个字符串列表的相似度。

Jaccard相似度是通过计算两个集合的交集与并集之比来衡量它们的相似程度。具体步骤如下:

  1. 将两个列表转化为集合形式,即将列表中的元素作为集合的元素。
  2. 计算两个集合的交集。
  3. 计算两个集合的并集。
  4. 计算交集与并集之比。
  5. 将比值作为相似度。

Python代码实现:

def jaccard_similarity(list1, list2):
    set1 = set(list1)
    set2 = set(list2)
    intersection = len(set1.intersection(set2))
    union = len(set1.union(set2))
    similarity = intersection / union
    return similarity
# 示例
list1 = ['apple', 'banana', 'orange']
list2 = ['apple', 'pear', 'peach']
similarity = jaccard_similarity(list1, list2)
print(similarity)

输出结果为:

0.25

表示两个字符串列表的相似度较低。

到此这篇关于使用Python计算两个不同列表的相似度的文章就介绍到这了,更多相关Python计算列表相似度内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文