我有 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 的匹配百分比的正确方法?
如果这种方法不正确,任何人都可以帮助我使用替代方法吗?
我认为这可以解决问题:
len(set(list_1).intersection(list_2)) / max(len(set(list_1)),len(set(list_2)))
实际上,您可以得到它们相交的长度,并将其除以
max
的 len(list_1), len(list_2)
。通过这种方式,您甚至不关心列表中的哪一个被动态更改。
分母中的
set()
运算是为了确保消除可能的重复项。
检查用于字符串匹配的fuzzywuzzy包。
您的尝试只是查看每个列表中的项目数量,而不是匹配项目的数量。 我认为你需要更多类似的:
len([i for i in B if i in A]) / len(A)
B 中与 A 中的项目数相匹配的项目数占 A 中项目的百分比。使用您的数据,结果为 16/20 = 0.8,即 80%。