파이썬 list.index() – 요소 위치 찾기 실전 예제와 대안 기법
파이썬 리스트는 정수, 문자열, 불리언, 중첩 리스트 등 모든 데이터 타입의 아이템을 담을 수 있는 순서 있는 컬렉션입니다. 내장 list.index() 메서드는 시퀀스 내에서 요소의 위치를 찾는 가장 빠른 방법입니다. 아래에서 단계별 가이드와 코드 스니펫, 그리고 요소가 여러 번 나타날 때 모든 인덱스를 가져오는 대안 기법들을 다룹니다.
list.index() 이해하기
list.index() 메서드는 지정된 값이 나타나는 가장 낮은 인덱스를 반환합니다. 값이 없으면 ValueError를 발생시킵니다. 자세한 내용은 공식 파이썬 문서를 참조하세요.
문법
list.index(요소, start=0, end=len(list))
매개변수
| 매개변수 | 설명 |
요소 | 찾고자 하는 값 |
start | 선택. 이 인덱스부터 검색 시작. 기본값 0. |
end | 선택. 이 인덱스 직전까지 검색. 기본값은 리스트 길이. |
반환값
첫 번째 일치 요소의 정수 인덱스 반환. 요소가 없으면 ValueError 발생.
예제: 기본 사용법
my_list = ['A', 'B', 'C', 'D', 'E', 'F']
print("Index of 'C':", my_list.index('C')) # 2
print("Index of 'F':", my_list.index('F')) # 5
예제: start와 end 사용
my_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J']
print("Index of 'C' between 1 and 5:", my_list.index('C', 1, 5)) # 2
print("Index of 'F' between 3 and 7:", my_list.index('F', 3, 7)) # 5
print("Index of 'D' starting from 1:", my_list.index('D', 1)) # 3
예제: 요소를 찾지 못한 경우
my_list = ['A', 'B', 'C', 'D']
try:
my_list.index('Z')
except ValueError as e:
print(e) # 'Z' is not in list
반복되는 요소의 모든 인덱스 가져오기
값이 여러 번 나타나면 list.index()는 첫 번째 위치만 반환합니다. 아래는 모든 인덱스를 수집하는 여러 접근법입니다.
For-루프 사용
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
for i, val in enumerate(my_list):
if val == 'Guru':
indices.append(i)
print(indices) # [0, 3, 6]
while-루프와 index() 조합
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
indices = []
next_index = -1
while True:
try:
next_index = my_list.index('Guru', next_index + 1)
indices.append(next_index)
except ValueError:
break
print(indices) # [0, 3, 6]
리스트 컴프리헨션
indices = [i for i, val in enumerate(my_list) if val == 'Guru']
print(indices) # [0, 3, 6]
enumerate() 사용
indices = [i for i, val in enumerate(my_list) if val == 'Guru']
print(indices) # [0, 3, 6]
filter() 사용
indices = list(filter(lambda i: my_list[i] == 'Guru', range(len(my_list))))
print(indices) # [0, 3, 6]
고급 기법
대용량 데이터셋을 위한 NumPy
수치 또는 대용량 텍스트 데이터를 다룰 때 리스트를 NumPy 배열로 변환하면 검색 속도를 높일 수 있습니다.
pip install numpy
import numpy as np
my_list = ['Guru', 'Siya', 'Tiya', 'Guru', 'Daksh', 'Riya', 'Guru']
array = np.array(my_list)
indices = np.where(array == 'Guru')[0]
print(indices) # [0 3 6]
more_itertools.locate()
함수형 접근을 선호한다면 more_itertools.locate()가 조건을 만족하는 인덱스 이터레이터를 반환합니다.
pip install more_itertools
from more_itertools import locate
indices = list(locate(my_list, lambda x: x == 'Guru'))
print(indices) # [0, 3, 6]
핵심 요약
list.index()는 값의 첫 번째 출현 위치를 찾는 가장 직접적인 방법입니다.
start와 end 매개변수로 검색 범위를 제한할 수 있습니다.
- 요소가 여러 번 나타날 때는 루프, 리스트 컴프리헨션,
enumerate(), filter(), NumPy나 more_itertools 같은 외부 라이브러리를 활용해 모든 인덱스를 수집하세요.
- 검색 값이 없을 수 있다면 항상
ValueError를 처리하세요.