2013-04-30 3 views
1

관련 문제에 대한 수많은 질문을 읽었지만 그 중 누구도 내 질문에 대답하지 않습니다. 그것은 반환하도록 내가 목록 (A)의 항목이 B의 어딘가에 존재하는 경우보고 싶어 지금파이썬에서 두 목록의 항목을 비교하면

List A = ['nike', 'adidas', 'reebok'] 

List B = ['sneakers', 'sneaker shoes', 'adidas shoes', 'nike', 'any shoe', 'all nikes', 'a nike shoe'] 

: 나는이 개 목록이

List result: [False, False, True, True, False, True, True] 

사실이 목록 B의 인스턴스를 나타냅니다 A의 항목이 일치합니다. 지금까지, 나는이 코드를 매우 비효율적으로 사용했습니다. 사전 미안의

for j in range(len(lista)): 
    for k in b: 
    if j in k: 
     lista[j] = 'DELETE' 

cuent = lista.count('DELETE') 

for i in range(cuent): 
    lista.remove('DELETE') 

덕분에이에 대한 답변 실제로 존재하는 경우 - 나는 유래 - 우주 :

편집에서 그것을 찾는 모든 희망을 잃은 한 시간 후 : 제작하지 죄송가 나 자신이 분명하다 - 나는 정확한 성냥을 찾고 있지 않다. 나는 성냥을 찾고있다. 다시 미안 해요!

답변

5

아마

keywords = ['nike', 'adidas', 'reebok'] 
items = ['sneakers', 'sneaker shoes', 'adidas shoes', 'nike', 'any shoe', 'all nikes', 'a nike shoe'] 
bits = [any(keyword in item for keyword in keywords) for item in items] 

또는 더 나은 나의 이해에서

import re 
regex = re.compile(r'%s' % '|'.join(keywords)) 
bits = [bool(regex.search(x)) for x in items] 

, 당신은 단지 전체 단어 검색, 단어 경계 (예 : "나이키" "모든 나이키를"일치)을 무시하려는 위의 식을 r'\b(%s)\b'으로 변경하십시오.

+0

이것은 완벽합니다. 매우 짧은 "키워드 (키워드 키워드 항목)"에 익숙하지 않습니다. - 표현식 - 내가 그것에 대해 더 많이 배울 수있는 곳을 알고 있습니까? 감사! – oliver13

+1

@ oliver13 [문서의 목록 내역] (http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) – TerryA

+2

@ oliver13 : 이것을 "생성자 표현식"이라고합니다. 예 : 설명은 http://stackoverflow.com/q/1756096/989121. – georg

관련 문제