2

我有一个字符串列表:

my_list = ['Paul', 'Robinson', 'Hismith', 'Smith']

我需要对其进行过滤并按相关性对结果进行排序:

> filter_list(my_list, 'smith')
> ['Smith', 'Hismith']
> 
> filter_list(my_list, 'paul')
> ['Paul']

我的列表很小,如果我可以使用尽可能少的逻辑/库,那就太好了。

你会怎么做?

谢谢!

4

2 回答 2

7

尝试以下操作(您可能需要调整cutoff=选项):

import difflib

my_list = ['Paul', 'Robinson', 'Hismith', 'Smith']
print difflib.get_close_matches('Paul', my_list)
# ['Paul']
print difflib.get_close_matches('Smith', my_list)
# ['Hismith', 'Smith']
于 2012-07-17T10:44:19.400 回答
6

很难说,什么是“相关性”。在我的回答中,我只接受word搜索在元素内并按其长度对结果进行排序(很有可能首先出现 100% 匹配):

def filter_list(li, word):
    return sorted((elem for elem in li if word.lower() in elem.lower()), key=len)
于 2012-07-17T10:38:07.557 回答