이 글에서는 Python의 intersection_update() 메서드를 활용해 여러 개(n개)의 배열에서 공통 요소를 찾는 방법을 알아보겠습니다.
여기서 다룰 문제는 리스트들을 담고 있는 배열이 주어졌을 때, 해당 배열들에 모두 포함된 공통 요소를 찾아내는 것입니다.
알고리즘
공통 요소를 찾는 과정은 다음과 같은 단계로 진행됩니다.
1. 배열 안의 첫 번째 리스트로 res를 초기화한다. 2. 리스트들을 담고 있는 배열을 순회한다. 3. intersection_update() 함수를 적용하여 공통 요소만 남기도록 res를 갱신한다. 4. 최종 결과 리스트를 반환하고, print 문으로 출력한다.
그럼 실제 구현 코드를 살펴보겠습니다.
예제 코드
def commonEle(arr):
# set(arr[0])으로 res 초기화
res = set(arr[0])
# 함수가 실행될 때마다 새로운 값으로 갱신됨
for curr in arr[1:]: # 슬라이싱
res.intersection_update(curr)
return list(res)
# 드라이버 코드
if __name__ == "__main__":
nest_list=[['t','u','o','r','i','a','l'], ['p','o','i','n','t'], ['t','u','o','r','i','a','l'], ['p','y','t','h','o','n']]
out = commonEle(nest_list)
if len(out) > 0:
print (out)
else:
print ('No Common Elements')실행 결과
['o', 't']
코드 설명
위 예제에서는 네 개의 문자 리스트가 중첩 리스트 형태로 주어집니다. commonEle() 함수는 먼저 첫 번째 리스트를 집합(set)으로 변환하여 초기화한 뒤, 나머지 리스트들을 순회하면서 intersection_update()를 호출합니다. 이 메서드는 현재 집합과 인자로 전달된 집합의 교집합으로 기존 집합을 제자리(in-place) 갱신하기 때문에, 반복이 끝나면 모든 리스트에 공통으로 존재하는 요소만 남게 됩니다.
결과적으로 네 개의 리스트 모두에 포함된 문자는 'o'와 't'뿐이므로, 출력은 ['o', 't']가 됩니다. 만약 공통 요소가 하나도 없다면 'No Common Elements'라는 메시지가 출력되도록 처리했습니다.
마무리
이번 글에서는 Python의 intersection_update() 메서드를 사용해 여러 배열에서 공통 요소를 효율적으로 찾는 방법과 그 구현 과정을 살펴보았습니다. 집합 연산을 활용하면 복잡한 반복문 없이도 간결하고 가독성 높은 코드로 교집합을 구할 수 있습니다.