이 글에서는 파이썬에서 람다(lambda) 표현식과 filter 함수를 활용해 두 배열의 교집합을 구하는 방법을 알아보겠습니다.
문제의 요구 사항은 간단합니다. 두 개의 배열이 주어졌을 때, 두 배열에 공통으로 존재하는 요소를 찾아내는 것입니다.
알고리즘 접근 방법
교집합을 구하는 절차는 다음과 같습니다.
- 두 개의 인자를 받는 교집합(intersection) 함수를 선언합니다.
- filter 함수와 함께 람다 표현식을 사용하여, 각 요소가 다른 배열에도 포함되어 있는지 검사하는 인라인 조건 함수를 만듭니다.
- 필터링된 공통 요소들을 형 변환(typecasting)을 통해 리스트 형태로 변환합니다.
- print 문을 사용하여 최종 결과를 출력합니다.
그럼 실제 구현 코드를 살펴보겠습니다.
예제 코드
def interSection(arr1, arr2): # 공통 요소 찾기
# filter 메서드와 람다 함수를 사용해 동일한 값 찾기
values = list(filter(lambda x: x in arr1, arr2))
print("arr1과 arr2의 교집합: ", values)
# 드라이버 프로그램
if __name__ == "__main__":
arr1 = ['t','u','t','o','r','i','a','l']
arr2 = ['p','o','i','n','t']
interSection(arr1, arr2)실행 결과
arr1과 arr2의 교집합: ['o', 'i', 't']
코드 설명
위 코드에서 핵심은 filter(lambda x: x in arr1, arr2) 부분입니다. filter 함수는 arr2의 각 요소를 순회하면서 람다 표현식의 조건(해당 요소가 arr1에 존재하는지 여부)을 평가하고, 조건이 참인 요소만 남깁니다. 이후 list()로 감싸 결과를 리스트로 변환하여 공통 요소만 담긴 새로운 리스트를 얻게 됩니다.
마치며
이처럼 파이썬에서는 람다 표현식과 filter 함수를 조합하면 별도의 반복문 없이도 간결하게 두 배열의 교집합을 구할 수 있습니다. 다만 대규모 데이터를 다룰 때는 성능을 위해 set 자료형을 활용한 set(arr1) & set(arr2) 방식도 함께 고려해 보시길 권장합니다.