Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 다른 리스트에서 한 리스트의 각 요소 인덱스 구하는 방법

한 리스트의 각 요소가 다른 리스트에서 어느 위치(인덱스)에 있는지 확인해야 하는 경우가 있습니다. 이럴 때 간단한 반복문과 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]을 반환하도록 기본값을 지정했습니다.

  • 그 결과를 리스트로 만들어 변수에 할당합니다.

  • 최종 결과 리스트를 콘솔에 출력합니다.

핵심 포인트

setdefaultget 메서드 덕분에 별도의 조건문 없이도 키가 존재하지 않는 경우를 자연스럽게 처리할 수 있습니다. 특히 예제 실행 결과에서 볼 수 있듯이, 두 번째 리스트의 17은 첫 번째 리스트에 존재하지 않으므로 [None]이 반환되고, 52는 인덱스 1에, 13은 인덱스 11에 위치함을 확인할 수 있습니다.