2016-10-09 3 views
1

일치하는 문자열이 있는지 프로그램에서 두 목록을 비교해야합니다. 그 중 하나는 이미 가져온 txt 문서입니다. 그게 내가 한 짓을두 목록 비교 (파이썬)

def compareLists(self, listA, listB): 
    sameWords = list() 

    for a in xrange(0,len(listA)): 
     for b in xrange(0,len(listB)): 
      if listA[a] == listB[b]: 
       sameWords.append(listA[a]) 
       pass 
      pass 
     pass 
    return sameWords 

그러나 내가 프로그램을 실행하면 그것은 하나가 있어야한다는 것을 알지는 못한다. if 블록 내부의 어딘가에 있다고 생각합니다.

+0

디버거를 사용해 보셨습니까? 각 반복 단계에서 listA 또는 listB 값을 쉽게 관찰 할 수 있습니다. – Rockbar

+0

보이는 교차로 작업을보고 있습니다. –

+5

'list (set (listA) & set (listB))'는 [여기]와 같이 원하는 것을 정확히 반환합니다 (http://stackoverflow.com/questions/642763/python-intersection-of-two-lists) . – Efferalgan

답변

1

코드에서 들여 쓰기가 올바른 것으로 가정합니다. 전략을 계속 수행하면이 코드가 작동합니다.

def compareLists(self, listA, listB): 
    sameWords = list() 

    for a in xrange(0,len(listA)): 
     for b in xrange(0,len(listB)): 
      if listA[a] == listB[b]: 
       sameWords.append(listA[a]) 
    return sameWords 

@Efferalgan이 제안한대로 교차 세트를 설정하기 만하면됩니다.

def compareLists(self, listA, listB): 
    return list(set(listA) & set(listB)) 

참고 : 교집합이 결과에서 중복 일치하는 단어를 제거합니다.

당신이 말했듯이, 당신은 텍스트 파일에서 라인을 읽고 있으며, 거기에 여전히 개머리즘이있는 것처럼 보입니다.

my_text_list = [s for s in open("my_text.txt").read().rsplit()] 
+0

아직 작동하지 않습니다. 임 꽤 확신합니다. txt 파일 때문에하지만 난 그것을 바로 가져올 그래서 그것을 목록으로 인쇄 할 수 있습니다. 파일이 너무 클 수도 있습니다. 그것은 약 15,000 줄을 가지고있다. –

+0

목록의 크기는 중요하지 않아야한다. 목록을 인쇄하고 그 안에있는 단어가 예상 한 내용인지 육안으로 확인하십시오. – Efferalgan

+0

15,000 줄이 좋을 것입니다. 인쇄 한 목록을 게시 할 수 있습니까? –