如何在python中计算2个列表的匹配百分比,其中A不会改变,B会动态变化?

问题描述 投票:0回答:3

我有 2 个列表需要查找匹配百分比。

A = ['Apple','Apricots','Avocados','Bananas','Cherries','Dragon Fruit','Grapes','Guava','Jackfruit','Kiwi','Lychee','Mango','Melon','Oranges','Pomegranate','Pineapple','Raspberries','Strawberries','Watermelon','Star Fruit']

B = ['Apple','Apricots','Avocados','Bananas','Cherries','Dragon Fruit','Grapes','Guava','Jackfruit','Kiwi','Lychee','Mango','Melon','Oranges','Pomegranate','Pineapple']

我编写了这样的代码来查找 A 的单词百分比。

print(f"Count of A: {len(A)}")
print(f'Count of B: {len(B)}')
d = len(A)+len(B)
print(f"Match Percentage: {round(100-((len(A)-len(B))/d*100), 2)}%")

输出为:

Count of A: 20
Count of B: 16
Match Percentage: 88.89%

这里A不会变化,B会动态变化。

理想情况下百分比看起来是正确的,但这是否是查找列表 A 与列表 B 的匹配百分比的正确方法?

如果这种方法不正确,任何人都可以帮助我使用替代方法吗?

python python-3.x
3个回答
0
投票

我认为这可以解决问题:

len(set(list_1).intersection(list_2)) / max(len(set(list_1)),len(set(list_2)))

实际上,您可以得到它们相交的长度,并将其除以

max
len(list_1), len(list_2)
。通过这种方式,您甚至不关心列表中的哪一个被动态更改。

分母中的

set()
运算是为了确保消除可能的重复项。


0
投票

检查用于字符串匹配的fuzzywuzzy包。


0
投票

您的尝试只是查看每个列表中的项目数量,而不是匹配项目的数量。 我认为你需要更多类似的:

len([i for i in B if i in A]) / len(A)

B 中与 A 中的项目数相匹配的项目数占 A 中项目的百分比。使用您的数据,结果为 16/20 = 0.8,即 80%。

© www.soinside.com 2019 - 2024. All rights reserved.