파이썬 NumPy의 numpy.char.rindex() 메서드를 사용하면 문자열에서 특정 부분 문자열(sub)이 마지막으로 등장하는 위치, 즉 가장 높은 인덱스를 반환할 수 있습니다. 이 메서드는 정수형(int) 배열을 결과로 출력하며, 만약 지정한 부분 문자열을 찾지 못하면 ValueError를 발생시킵니다.
rindex() 메서드의 매개변수는 다음과 같습니다.
- 첫 번째 매개변수: 검색 대상이 되는 입력 문자열 배열
- 두 번째 매개변수: 검색할 부분 문자열(sub)
- 세 번째·네 번째 매개변수(선택 사항): start와 end 값으로, 슬라이스 표기법과 동일한 방식으로 검색 범위를 지정합니다.
구현 단계
먼저 필요한 라이브러리를 임포트합니다.
import numpy as np
1차원 문자열 배열을 생성합니다.
arr = np.array(['KATIE', 'KATE', 'BRATleukATp'])
생성된 배열을 화면에 출력합니다.
print("Array...\n", arr)배열의 데이터 타입을 확인합니다.
print("\nArray datatype...\n", arr.dtype)배열의 차원 수를 확인합니다.
print("\nArray Dimensions...\n", arr.ndim)배열의 형태(shape)를 확인합니다.
print("\nOur Array Shape...\n", arr.shape)배열에 포함된 요소의 총 개수를 확인합니다.
print("\nNumber of elements in the Array...\n", arr.size)이제 np.char.rindex() 메서드를 사용해 각 문자열에서 'AT'라는 부분 문자열이 나타나는 가장 높은 인덱스를 구합니다. 여기서는 start=1, end=9로 검색 범위를 제한했습니다.
print("\nResult (rindex() method)...\n", np.char.rindex(arr, 'AT', start=1, end=9))전체 예제 코드
import numpy as np
# 1차원 문자열 배열 생성
arr = np.array(['KATIE', 'KATE', 'BRATleukATp'])
# 배열 출력
print("Array...\n", arr)
# 데이터 타입 확인
print("\nArray datatype...\n", arr.dtype)
# 차원 수 확인
print("\nArray Dimensions...\n", arr.ndim)
# 배열 형태 확인
print("\nOur Array Shape...\n", arr.shape)
# 요소 개수 확인
print("\nNumber of elements in the Array...\n", arr.size)
# np.char.rindex() 메서드로 부분 문자열 'AT'가
# 나타나는 가장 높은 인덱스를 반환합니다.
# 부분 문자열을 찾지 못하면 ValueError가 발생합니다.
print("\nResult (rindex() method)...\n", np.char.rindex(arr, 'AT', start=1, end=9))실행 결과
Array... ['KATIE' 'KATE' 'BRATleukATp'] Array datatype... <U11 Array Dimensions... 1 Our Array Shape... (3,) Number of elements in the Array... 3 Result (rindex() method)... [1 1 2]
결과 분석
출력 결과를 보면 각 문자열에서 'AT'가 검색 범위(start=1, end=9) 안에서 마지막으로 발견된 위치가 반환되었습니다.
- 'KATIE': 인덱스 1 위치에서 'AT'가 발견됩니다.
- 'KATE': 역시 인덱스 1 위치에서 'AT'가 발견됩니다.
- 'BRATleukATp': 'AT'가 두 번 등장하지만(인덱스 2와 8), start=1부터 end=9까지의 범위 조건에 따라 가장 높은 유효 인덱스인 2가 반환됩니다.
참고로, rindex()와 유사한 기능을 하는 rfind() 메서드도 있습니다. 두 메서드의 차이점은 부분 문자열을 찾지 못했을 때의 동작입니다. rindex()는 ValueError를 발생시키는 반면, rfind()는 -1을 반환합니다. 따라서 검색 실패를 예외로 처리하고 싶다면 rindex()를, 실패 시 별도 값을 활용하고 싶다면 rfind()를 사용하는 것이 좋습니다.