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

Python에서 인덱스 목록으로 리스트의 여러 요소 한 번에 접근하기

파이썬에서는 대괄호([])와 인덱스 번호를 사용해 리스트의 개별 요소에 쉽게 접근할 수 있습니다. 하지만 여러 개의 인덱스에 해당하는 요소들을 한 번에 가져와야 할 때는 이 방식을 그대로 적용할 수 없습니다. 이번 글에서는 이런 상황에서 활용할 수 있는 두 가지 방법을 소개합니다.

방법 1: 두 개의 리스트 활용하기

가장 직관적인 방법입니다. 원본 리스트와 별도로, 가져오고 싶은 인덱스들을 담은 또 하나의 리스트를 준비합니다. 그다음 리스트 컴프리헨션(list comprehension)으로 인덱스를 순회하면서 해당 값을 원본 리스트에 전달해 요소를 조회합니다.

예제

given_list = ["Mon", "Tue", "Wed", "Thu", "Fri"]
index_list = [1, 3, 4]

# 리스트 출력
print("Given list : " + str(given_list))
print("List of Indices : " + str(index_list))

# 리스트 컴프리헨션 사용
res = [given_list[n] for n in index_list]

# 결과 출력
print("Result list : " + str(res))

출력 결과

위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다.

Given list : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
List of Indices : [1, 3, 4]
Result list : ['Tue', 'Thu', 'Fri']

방법 2: map과 __getitem__ 활용하기

for 루프 대신 map() 함수와 리스트 객체의 내장 메서드인 __getitem__을 조합하면 동일한 결과를 더 간결한 코드로 얻을 수 있습니다. map은 인덱스 리스트의 각 요소를 __getitem__에 전달하고, list()로 감싸 최종 결과 리스트를 만듭니다.

예제

given_list = ["Mon", "Tue", "Wed", "Thu", "Fri"]
index_list = [1, 3, 4]

# 리스트 출력
print("Given list : " + str(given_list))
print("List of Indices : " + str(index_list))

# map과 __getitem__ 사용
res = list(map(given_list.__getitem__, index_list))

# 결과 출력
print("Result list : " + str(res))

출력 결과

위 코드를 실행하면 아래와 같은 결과를 얻을 수 있습니다.

Given list : ['Mon', 'Tue', 'Wed', 'Thu', 'Fri']
List of Indices : [1, 3, 4]
Result list : ['Tue', 'Thu', 'Fri']

참고: operator.itemgetter 활용

조금 더 파이썬다운 방식을 선호한다면 표준 라이브러리의 operator.itemgetter를 사용할 수도 있습니다. 가독성이 좋으면서 성능 면에서도 유리합니다.

from operator import itemgetter

given_list = ["Mon", "Tue", "Wed", "Thu", "Fri"]
index_list = [1, 3, 4]

res = list(itemgetter(*index_list)(given_list))
print(res) # ['Tue', 'Thu', 'Fri']

마무리

정리하면, 소규모 코드나 가독성이 중요한 경우에는 리스트 컴프리헨션이 가장 권장되는 방식이며, 함수형 스타일을 원한다면 map과 __getitem__, 성능과 표준 라이브러리 활용을 중시한다면 operator.itemgetter가 좋은 선택입니다. 상황에 맞는 방법을 골라 사용하면 됩니다.