假设我有一个string "Hello"和一个列表

words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo','question', 'Hallo', 'format']

如何找到最接近n words并出现在列表"Hello"中的words

在这种情况下,我们将获得['hello', 'hallo', 'Hallo', 'hi', 'format'...]
因此,策略是从最接近的词到最远的词对列表词进行排序。

我想到了这样的事情
word = 'Hello'
for i, item in enumerate(words):
    if lower(item) > lower(word):
      ...

但是在大型列表中,这非常慢。

更新difflib可以工作,但是速度也很慢。 (words list内部有630000个以上的单词(已排序,每行一个)。因此,每次搜索最接近的单词时,检查列表都需要5到7秒!

最佳答案

使用 difflib.get_close_matches

>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'Hallo', 'hallo']

请查看文档,因为该函数默认返回3个或更少的最接近匹配项。

10-05 19:10