한 리스트의 각 요소가 다른 리스트에서 어느 위치(인덱스)에 있는지 확인해야 하는 경우가 있습니다. 이럴 때 간단한 반복문과 enumerate 함수, 그리고 setdefault 메서드를 활용하면 효율적으로 해결할 수 있습니다.
여기에 리스트 컴프리헨션(list comprehension)과 딕셔너리의 get 메서드를 함께 사용하면 더욱 깔끔한 코드를 작성할 수 있습니다.
예제 코드
아래는 전체 동작 과정을 보여주는 예제입니다.
my_list = [14, 52, 23, 47, 18, 23, 12, 54, 43, 22, 28, 13]
print("첫 번째 리스트 :")
print(my_list)
my_list_2 = [17, 52, 13]
print("두 번째 리스트 :")
print(my_list_2)
element_indices = dict()
for index, value in enumerate(my_list):
element_indices.setdefault(value, []).append(index)
my_result = [element_indices.get(index, [None]) for index in my_list_2]
print("결과 :")
print(my_result)실행 결과
첫 번째 리스트 : [14, 52, 23, 47, 18, 23, 12, 54, 43, 22, 28, 13] 두 번째 리스트 : [17, 52, 13] 결과 : [[None], [1], [11]]
코드 설명
정수로 이루어진 첫 번째 리스트를 정의하고 콘솔에 출력합니다.
찾고자 하는 값들이 담긴 두 번째 정수 리스트를 정의하고 출력합니다.
요소의 인덱스를 저장할 빈 딕셔너리를 생성합니다.
enumerate함수를 사용해 첫 번째 리스트를 순회하면서 각 요소의 값과 인덱스를 함께 얻습니다.setdefault메서드를 사용해 해당 요소 값이 딕셔너리에 없으면 기본값으로 빈 리스트를 설정합니다.현재 인덱스를 해당 요소의 리스트에 추가(append)합니다. 이렇게 하면 중복된 값의 모든 인덱스를 저장할 수 있습니다.
리스트 컴프리헨션으로 두 번째 리스트의 요소들을 순회하며,
get메서드로 해당 값의 인덱스 목록을 가져옵니다. 만약 값이 존재하지 않으면[None]을 반환하도록 기본값을 지정했습니다.그 결과를 리스트로 만들어 변수에 할당합니다.
최종 결과 리스트를 콘솔에 출력합니다.
핵심 포인트
setdefault와 get 메서드 덕분에 별도의 조건문 없이도 키가 존재하지 않는 경우를 자연스럽게 처리할 수 있습니다. 특히 예제 실행 결과에서 볼 수 있듯이, 두 번째 리스트의 17은 첫 번째 리스트에 존재하지 않으므로 [None]이 반환되고, 52는 인덱스 1에, 13은 인덱스 11에 위치함을 확인할 수 있습니다.