2014-12-20 1 views
3

나는 1 천만 개의 회사 이름이있는 두 개의 목록 (list1 및 list2)이 있습니다. 각 목록에는 중복이 없지만 일부 회사는 두 목록에 나타납니다. 그리고 그 회사가 무엇인지 찾아야합니다. 아래 코드를 작성했습니다 :Python에서 두 개의 긴 항목 목록의 중복 확인

list_matched = [] 
for i in range(len(list1)): 
    for j in range(len(list2)): 
     if list1[i] == list2[j]: 
      list_matched.append(list1[i]) 

이 코드의 문제점은 실행이 완료되지 않는다는 것입니다. 내 질문은 합리적인 시간 내에이 일을 끝내기 위해 내가 할 수있는 일이다. 1,000 만 명의 이름이 너무 커서 처리 할 수없는 것 같습니다.

+0

이 목록이 우연히 정렬되어 있습니까? – kojiro

답변

7

설정 논리를 사용하십시오. 이 작업을 위해 특별히 설계되었습니다.

a = set(list1) 
b = set(list2) 

companies_in_both = a & b 

(이것은 출력으로 set를 생성합니다. 당신은 목록으로 필요한 경우에, 다만 list()에 세트를 전달합니다.)

+0

목록을 집합으로 변환하는 대신 처음에 집합으로 만들 수 있다면 더 빠르다는 점에 유의하십시오. – porglezomp

+0

@ porglezomp 어떻게하면 처음부터 세트로 만들 수 있습니까? 아마도이 데이터는 API, 데이터베이스 또는 플랫 파일에서 가져온 것입니다. – kojiro

+0

플랫 파일에서 가져온 파일 인 경우 빌드하는 동안 목록에'.append '대신'.add'를 사용합니다. – porglezomp

3

나는 하나의 목록에서 설정을하고 검사를 권하고 싶습니다 다른 예 : 물론

inlist1 = set(list1) 
list_matched = [x for x in list2 if x in inlist1] 

당신이 그것을 다른 방법으로 '라운드, 어떤 목록의 순서를 따라 (있는 경우)를 보존하려는 할 수있는 -이 조각은 list2의 순서를 유지합니다.