从列表中找到最接近的值?

3

我有一个字符串列表:

list = ["END_BOOTS", "END_CHEST", "MIDAS_SWORD", "SLIME_HAT", "WOOD", "ENDER_PEARL"]

以及一个关键词:

keyword = "ENDER_BOOTS"

我需要扫描列表以搜索最接近关键字的值。在这种情况下,最接近的值将是END_BOOTS。如果找不到这样的值,代码应该返回false。

我尝试将每个单独的值转换为字符列表,对其进行排序,并对关键字执行相同的操作。然后我会比较它们并检查哪个字符列表与关键字有更多的共同字母。但是,这似乎并不起作用,而且不太有效率。

在Python 3中,解决此问题的好方法是什么?


1
考虑到在线上有大量关于字符串匹配和相似度的信息,我期望看到的是编码尝试,而不是过于笼统的寻求解决方案。 - Prune
请查看fuzzywuzzy库以进行字符串匹配。 - Francisco
2个回答

4
import difflib

a = 'ENDER_BOOTS'
b = 'END_BOOTS'

seq = difflib.SequenceMatcher(None,a,b)
d = seq.ratio()*100
print(d) 

循环遍历列表,并返回得分最高的单词


你也可以使用for循环来遍历列表,而不是使用库来代替你完成。只是一点小建议。 - 10 Rep
@TheMaker 我的导师曾经说过,一个好的程序员是一个懒惰的程序员。 - Hadi Haidar
他是对的 :). 我也学会了懒惰,但我认为你会学到更多。 - 10 Rep

1
我建议计算您搜索关键字与列表中每个项目之间的编辑距离,然后将最小值作为匹配项。
import editdistance

item_list = ["END_BOOTS", "END_CHEST", "MIDAS_SWORD", "SLIME_HAT", "WOOD", "ENDER_PEARL"]

keyword = "SLIMER_HUT"
distances = [editdistance.eval(keyword, item) for item in item_list]
match_index = distances.index(min(distances))

print(distances)
# [10, 9, 10, 2, 10, 9]

print(item_list[match_index])
# SLIME_HAT

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接