교집합(Intersection) 연산이란, 두 개의 리스트에서 공통으로 포함된 원소만 추출하여 새로운 세 번째 리스트에 저장하는 작업을 의미합니다.
List1 :: [1, 2, 3] List2 :: [2, 3, 6] List3 :: [2, 3]
위 예시에서 List1과 List2 양쪽에 모두 존재하는 값은 2와 3이므로, List3에는 [2, 3]이 저장됩니다.
알고리즘
1단계: 두 개의 리스트를 입력받습니다. 2단계: 첫 번째 리스트의 모든 원소를 순회하며 두 번째 리스트의 원소와 비교합니다. 3단계: 일치하는 원소가 발견되면 세 번째 리스트에 저장합니다.
예제 코드
# 두 리스트의 교집합 구하기
def intertwolist(A, B):
C = [i for i in A if i in B]
return C
# 드라이버 코드
A = list()
B = list()
n = int(input("리스트의 크기를 입력하세요 :: "))
print("첫 번째 리스트의 원소를 입력하세요 ::")
for i in range(int(n)):
k = int(input(""))
A.append(k)
print("두 번째 리스트의 원소를 입력하세요 ::")
for i in range(int(n)):
k = int(input(""))
B.append(k)
print("최종 결과 리스트 ::>", intertwolist(A, B))핵심 로직은 C = [i for i in A if i in B] 한 줄입니다. 리스트 컴프리헨션(list comprehension)을 사용하여 첫 번째 리스트 A의 각 원소가 두 번째 리스트 B에 존재하는지 확인하고, 존재하는 원소만 새로운 리스트 C에 담습니다.
실행 결과
리스트의 크기를 입력하세요 :: 5 첫 번째 리스트의 원소 입력 :: 12 23 45 67 11 두 번째 리스트의 원소 입력 :: 23 45 88 11 22 최종 결과 리스트 ::> [23, 45, 11]
set()을 활용한 더 간결한 방법
파이썬에서는 내장 자료형인 set의 교집합 연산자(&)를 활용하면 훨씬 간결하게 처리할 수 있습니다.
A = [1, 2, 3] B = [2, 3, 6] result = list(set(A) & set(B)) print(result) # 출력: [2, 3]
다만 set은 중복을 허용하지 않고 순서가 유지되지 않으므로, 원본 리스트의 순서나 중복 원소를 그대로 유지해야 하는 경우에는 앞서 소개한 리스트 컴프리헨션 방식이 더 적합합니다.