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

파이썬 NumPy rindex() 메서드로 범위 내에서 부분 문자열이 나타나는 가장 높은 인덱스 구하기

파이썬 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()를 사용하는 것이 좋습니다.