Python으로 데이터 분석을 하다 보면 두 개의 리스트(list)를 하나로 병합해야 하는 상황이 자주 발생합니다. 하지만 각 리스트에 중복된 요소가 있을 경우 이를 어떻게 처리할지가 고민거리가 됩니다. 이 글에서는 첫 번째 리스트의 모든 요소(중복 포함)는 그대로 유지하고, 두 번째 리스트에서는 중복되지 않는 고유한 요소만 추가하는 방법을 소개합니다.
방법 1: extend() 함수 사용하기
가장 직관적인 방법은 첫 번째 리스트를 복사해 결과 리스트를 만든 뒤, 반복문(for loop)으로 두 번째 리스트의 각 요소가 결과 리스트에 이미 존재하는지 확인하는 것입니다. 존재하지 않는 요소만 extend() 함수를 통해 결과 리스트에 추가합니다.
예제 코드
# 주어진 리스트 A listA = ['A', 'B', 'B', 'X'] # 주어진 리스트 B listB = ['B', 'X', 'Z', 'P'] # 결과 리스트 생성 (첫 번째 리스트 복사) res = list(listA) # 리스트 B에서 결과 리스트에 없는 요소만 추가 res.extend(i for i in listB if i not in res) # 결과 출력 print(res)
실행 결과
['A', 'B', 'B', 'X', 'Z', 'P']
실행 결과를 보면 첫 번째 리스트의 중복 요소 'B'는 그대로 두 번 포함되어 있고, 두 번째 리스트에서 새로운 요소인 'Z'와 'P'만 추가된 것을 확인할 수 있습니다.
방법 2: set() 함수 사용하기
set() 함수를 활용하면 더 간결하게 처리할 수 있습니다. 집합(set)은 중복을 허용하지 않으므로, 각 리스트를 집합으로 변환한 뒤 두 집합의 차집합(difference)을 구하면 두 번째 리스트에만 존재하는 고유한 요소를 얻을 수 있습니다. 마지막으로 이 차집합 결과를 첫 번째 리스트에 연결하면 됩니다.
예제 코드
# 주어진 첫 번째 리스트 listA = ['A', 'B', 'B', 'X'] # 주어진 두 번째 리스트 listB = ['B', 'X', 'Z', 'P'] # 각 리스트를 집합으로 변환해 중복 제거 listA_uniq = set(listA) listB_uniq = set(listB) # 리스트 B에만 있는 고유 요소 추출 (차집합) diff_lists = listB_uniq - listA_uniq res = listA + list(diff_lists) # 결과 출력 print(res)
실행 결과
['A', 'B', 'B', 'X', 'P', 'Z']
여기서도 첫 번째 리스트의 중복 요소는 유지되고, 두 번째 리스트의 고유 요소만 뒤에 추가됩니다. 다만 집합은 순서를 보장하지 않기 때문에, 차집합 결과의 요소 순서는 실행 시점에 따라 달라질 수 있다는 점에 유의해야 합니다. 순서가 중요하다면 첫 번째 방법인 extend() 방식을 사용하는 것이 좋습니다.
정리
두 방법 모두 첫 번째 리스트의 중복 요소를 보존하면서 두 번째 리스트의 고유한 요소만 병합한다는 동일한 목표를 달성합니다. 요소 순서를 유지해야 한다면 extend() 방식, 코드를 간결하게 작성하고 싶다면 set() 방식을 선택하면 됩니다.