Python数据开发工作中的需求两个不同列表给出相似度,本文实现判断数字类型相似度和字符串类型相似度,非常实用!
数字类型相似度
可以使用余弦相似度来计算两个列表的相似度。具体步骤如下:
- 将两个列表转化为向量形式,即将列表中的元素作为向量的分量。
- 计算向量的点积。
- 计算向量的模长。
- 计算余弦值。
- 将余弦值作为相似度。
以下是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相似度是通过计算两个集合的交集与并集之比来衡量它们的相似程度。具体步骤如下:
- 将两个列表转化为集合形式,即将列表中的元素作为集合的元素。
- 计算两个集合的交集。
- 计算两个集合的并集。
- 计算交集与并集之比。
- 将比值作为相似度。
以下是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
表示两个字符串列表的相似度较低。
以上是此问题报错原因的解决方法,欢迎评论区留言讨论是否能解决,如果有用欢迎点赞收藏文章谢谢支持,博主才有动力持续记录遇到的问题!!!