2012-07-17 4 views
2

에 의해 목록 및 주문 항목을 필터링내가 문자열 목록이 관련

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

내 목록이 작고 그것을 가능한 적은 로직/라이브러리를 사용할 수 있다면 좋을 것입니다.

어떻게 하시겠습니까?

감사합니다.

+3

먼저 "관련성"을 정의하십시오. –

+0

정렬 된 목록을 사용자가보다 유용하게 사용할 수 있도록 간단한 관련성 논리 만 필요합니다. 먼저 나타나는 전체 일치가 가장 중요한 비트입니다 (그리고 아마도 유일한 것임). –

답변

6

"이해 관계"란 무엇입니까? 시도되는 word이 요소 내에 있고 (100 % 일치가 먼저 표시됩니다 좋은 기회) 자신의 길이에 의해 결과를 정렬하면 내 대답에 난 단지 동의 :

def filter_list(li, word): 
    return sorted((elem for elem in li if word.lower() in elem.lower()), key=len) 
+1

+1은 마르코가 의미 한 바에 관계없이 '관련성'별로 정렬하지 않습니다. –

+0

@TimPietzcker - "관련성"기능을 추가했습니다. – eumiro

+0

이것은 정확하게 구현되었지만 관련성이없는 부분입니다. –

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'] 
+0

니스, [difflib]에 대해 몰랐습니다 (http://docs.python.org/library/difflib.html)! –

+0

훌륭한 답변 (관련도가 없어도). –

+1

@MarcoFucci "관련성"의 정의는 내 대답 시점에서 정의되지 않았으므로 "가장 관련성이 높은"== "가장 유사한" –