파이썬에서 리스트(List)뿐만 아니라 문자열, 튜플과 같은 다른 시퀀스 타입에도 index() 메서드가 기본으로 제공됩니다. 이 메서드는 특정 요소가 처음 등장하는 위치(인덱스)를 찾을 때 가장 간단하고 유용한 방법입니다.
index() 메서드로 첫 번째 위치 찾기
index() 메서드는 괄호 안에 넣은 값과 일치하는 첫 번째 요소의 인덱스를 반환합니다.
>>> L1 = ['a', 'b', 'c', 'a', 'x']
>>> L1
['a', 'b', 'c', 'a', 'x']
>>> L1.index('a')
0
리스트 L1에는 문자 'a'가 두 번 포함되어 있지만, index('a')는 처음 등장하는 위치인 0만 반환합니다.
주의: 요소가 없으면 오류 발생
찾으려는 값이 리스트에 존재하지 않으면 ValueError 예외가 발생합니다. 따라서 안전하게 사용하려면 in 연산자로 먼저 존재 여부를 확인하거나, try-except 문으로 예외를 처리하는 것이 좋습니다.
>>> if 'z' in L1:
... print(L1.index('z'))
... else:
... print('요소가 없습니다.')
...
요소가 없습니다.
또한 index()는 검색 범위를 지정하는 선택적 매개변수 start, end를 지원하여, 특정 구간 안에서만 검색할 수도 있습니다.
enumerate()로 모든 발생 위치 찾기
특정 요소가 리스트에 여러 번 나타날 때 모든 인덱스를 구하려면 enumerate() 함수를 활용하면 됩니다. enumerate()는 리스트의 각 요소에 대해 인덱스와 값을 함께 제공하는 이터레이터를 생성합니다.
>>> for i, j in enumerate(L1):
... if j == 'a':
... print(i)
...
0
3
위 코드는 'a'가 등장하는 모든 위치인 0과 3을 차례로 출력합니다.
리스트 컴프리헨션으로 한 줄로 처리하기
반복문 대신 리스트 컴프리헨션을 사용하면 더욱 간결하게 결과를 리스트 형태로 얻을 수 있습니다.
>>> [i for i, j in enumerate(L1) if j == 'a']
[0, 3]
정리
- index(): 특정 요소의 첫 번째 인덱스를 반환하며, 요소가 없으면 ValueError 발생
- enumerate(): 인덱스와 값을 함께 순회하여 조건에 맞는 모든 위치를 찾는 데 유용
- 리스트 컴프리헨션: 반복 코드를 한 줄로 압축해 결과를 리스트로 반환
상황에 맞게 세 가지 방법을 적절히 조합하면 파이썬 리스트에서 원하는 요소의 위치를 효율적으로 검색할 수 있습니다.