2011-08-04 2 views
1

2 개의 매우 큰 배열이 있습니다.2 큰 배열을 어떻게 비교합니까?

이 코드는 실행 속도가 매우 느릴까요? 배열이 정말 큰 경우,이 메모리를 많이 필요로하는

hashed = set(results2) 

.... 

    if result1 not in hashed: 

참고 :

 

results1 = [1,2,3..] 
results2 = [1,2,3,4 ... ] 


for result1 in results1: 
    if result1 not in results2: 
     print result1 

+0

얼마나 큰가? – tomasz

답변

7

set를 사용합니다.

또는 두 배열을 모두 정렬하고 두 개의 인덱스를 사용하십시오. 두 요소가 같으면 두 인덱스를 모두 늘립니다. 그것들이 동일하지 않은 경우, 더 작은 요소를 포함하는 배열의 인덱스를 증가시킵니다.

1

시도 이와

L1 = 4,2,4,5,2,1,3,3,34,54,3445,4]

L2 = [5,7,4,5,8,5,2,4,56]

diff_l = 목록 (SET (L1) -set (L2))

,745, 더 작업

Reference에 대한

그러나 전체 돕거나 거대한 데이터

0

는 일반 차이 것인지 정말 (a의 요소를하지만 b에서)하지 않거나 대칭을 위해 좋은 작동하지 않을 수 있습니다 차이 (둘 다 존재하지 않는 요소)이지만 다행히도 목록을 set으로 변환 한 후 regular set operations을 사용하여 둘 다 수행 할 수 있습니다.

그러나 경고 세트를 설정하는 목록은 중복 된 요소를 포함 할 수 없으므로 목록에서 중복 요소를 제거합니다. (예 : 요소를

>>> set(a) - set(b) 
set([0, 1, 2, 3, 4, 5]) 

대칭 차이를 얻으려면 :

그래서 우리의 데이터 :

>>> a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 
>>> b = [12, 11, 10, 9, 8, 7, 6] 

b에, 즉 일반 차이, a에 존재하는 요소를 얻을 수 있지만하려면를 선언 할 수 있습니다 하나의 배열에만 있지만 둘 다 포함 할 수 없음) :

>>> set(a)^set(b) 
set([0, 1, 2, 3, 4, 5, 10, 11, 12]) 

추가 보너스로 다음 두 요소에 모두 포함 된 요소 :

>>> set(a) & set(b) 
set([8, 9, 6, 7]) 
관련 문제