한 리스트에 중복된 값이 있을 때, 그 중복이 발생한 인덱스 위치를 기준으로 다른 리스트에서도 같은 위치의 요소를 제거해야 하는 경우가 있습니다. 이럴 때 Python의 enumerate 함수, 리스트 컴프리헨션(list comprehension), 그리고 간단한 반복문을 조합하면 손쉽게 해결할 수 있습니다.
예제 코드
아래는 이를 구현한 전체 코드입니다.
my_list_1 = [4, 5, 6, 5, 4, 7, 8, 6]
my_list_2 = [1, 7, 6, 4, 7, 9, 10, 11]
print("첫 번째 리스트 :")
print(my_list_1)
print("두 번째 리스트 :")
print(my_list_2)
temp_set = set()
temp = []
for index, value in enumerate(my_list_1):
if value not in temp_set:
temp_set.add(value)
else:
temp.append(index)
my_result = [element for index, element in enumerate(my_list_2) if index not in temp]
print("결과 :")
print(my_result)실행 결과
첫 번째 리스트 : [4, 5, 6, 5, 4, 7, 8, 6] 두 번째 리스트 : [1, 7, 6, 4, 7, 9, 10, 11] 결과 : [1, 7, 6, 9, 10]
코드 설명
- 정수로 이루어진 두 개의 리스트를 정의하고 콘솔에 출력합니다.
- 중복 여부를 확인하기 위해 빈 집합(set)인
temp_set을 생성합니다. - 중복이 발견된 인덱스를 저장할 빈 리스트
temp를 생성합니다. enumerate함수를 사용해 첫 번째 리스트를 순회하면서, 이미 집합에 존재하는 값이면 해당 인덱스를temp에 추가합니다. 즉, 처음 등장하는 값은 통과시키고 두 번째 이상 등장하는 값의 위치만 기록합니다.- 리스트 컴프리헨션을 사용해 두 번째 리스트를 순회하면서, 앞서 기록한 인덱스 목록(
temp)에 포함되지 않은 위치의 요소만 새로운 리스트로 만듭니다. - 그 결과를 변수
my_result에 할당한 뒤 콘솔에 출력합니다.
핵심 포인트
이 방식의 핵심은 enumerate를 통해 값과 함께 인덱스를 얻을 수 있다는 점입니다. 집합(set)을 사용하면 값의 존재 여부를 O(1) 시간 복잡도로 확인할 수 있어, 리스트가 커져도 효율적으로 동작합니다. 이 패턴은 시계열 데이터 정렬, 병렬 리스트 동기화 등 실무에서도 유용하게 활용됩니다.