찾고자 하는 요소가 앞에서부터 몇 번째에 위치하는지 알고자 하면 find 또는 index를 사용하면 된다.
하지만, 뒤에서부터 찾고 싶을 때는 어떻게 해야 할까?
물론 주어진 리스트를 거꾸로 정렬한 뒤 찾는 방법도 있겠지만, 원래 상태에서 뒤에서부터의 위치를 찾아야 한다면 새로운 방법이 필요하다.
그럴 때 index, find 앞에 r만 붙여 rindex, rfind를 사용하면 된다.
먼저, rindex부터 살펴보자.
'abcdefghijklmnopqrstuvwxyz'와 같이 반복되는 문자열이 하나도 없는 경우에는 index, rindex의 결과가 같다.
x의 위치는 23번 인덱스에 위치하기 때문에 앞에서부터 x를 찾아도, 뒤에서부터 x를 찾아도 같은 위치에 존재한다.
하지만 'wxyzwxyz'와 같이 반복되는 문자열이 있는 경우에는 index, rindex의 결과가 다른 것을 볼 수 있다.
앞에서부터 'x'의 위치를 찾으면 1번 인덱스가 리턴되는 반면, 뒤에서부터 'x'를 찾으면 5번 인덱스를 리턴한다.
다음으로 rfind를 살펴보자.
rfind 역시 반복되는 문자열이 없으면 find와 결과가 같은 것을 볼 수 있다.
하지만, 반복되는 문자열이 있으면 rfind는 뒤에서부터 주어진 문자열과 일치하는 위치를 찾아주고, find는 앞에서부터 주어진 문자열과 일치하는 위치를 찾아준다.
조금 더 긴 문장에서 is의 위치를 find, rfind로 찾아보자.
find를 사용하여 'is'를 찾으면 앞에서부터 찾으므로 my name is ddu에서의 'is'의 위치를 찾아주고, rfind를 사용하여 'is'를 찾으면 뒤에서부터 찾으므로 this is my blog! 에서의 'is'의 위치를 찾아준다.
index를 사용하여 'o'를 찾으면 앞에서부터 찾으므로 Hello에서의 'o'의 위치를 찾아주고, rindex를 사용하여 'o'를 찾으면 뒤에서부터 찾으므로 this is my blog!에서의 'o'의 위치를 찾아준다.
정해진 범위 안에서 찾기 위해서는 rfind(찾을 문자열, 시작 위치, 끝 위치), rindex(찾을 문자열, 시작 위치, 끝 위치)로 작성해 주면 된다.
시작부터 마지막까지 탐색하고 싶다면 끝 위치는 생략할 수 있다.
정해진 범위 안에서 찾고자 하는 문자열이 없으면 rfind는 find와 같이 -1을 리턴한다.
그와 반대로 rindex는 찾고자 하는 문자열이 없으면 index와 마찬가지로 ValueError가 발생한다.