Python: find closest string (from a list) to another string
algorithm, list, python, string
Solution
Use `difflib.get_close_matches`.
>>> words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo', 'question', 'format']
>>> difflib.get_close_matches('Hello', words)
['hello', 'Hallo', 'hallo']
Please look at the documentation, because the function returns 3 or less closest matches by default.
Problem
Let's say I have a `string` `"Hello"` and a list ``` words = ['hello', 'Hallo', 'hi', 'house', 'key', 'screen', 'hallo','question', 'Hallo', 'format'] ``` How can I find the `n words` that are the closest to `"Hello"` and present in the list `words` ? In this case, we would have `['hello', 'hallo', 'Hallo', 'hi', 'format'...]` So the strategy is to sort the list words from the closest word to the furthest. I thought about something like this ``` word = 'Hello' for i, item in enumerate(words): if lower(item) > lower(word): ... ``` but it's very slow in large lists. UPDATE `difflib` works but it's very slow also. (`words list` has 630000+ words inside (sorted and one per line)). So checking the list takes 5 to 7 seconds for every search for closest word!