포포's 코딩&일상 기록

파이썬] 문자열.index() 와 문자열.find() 함수/메소드 본문

카테고리 없음

파이썬] 문자열.index() 와 문자열.find() 함수/메소드

포포252 2024. 1. 26. 08:35

문자열 s에 특정 문자열 'ab'가 어느 위치에 포함되어 있는지를 어떻게 알 수 있을까요? 만약 포함되어 있지 않는다면 -1을 출력하며, 여러 번 나타난다면 가장 앞선 위치를 찾는 문제라고 가정해봅시다.

논리적으로 접근한다면, 각각의 위치에 대해 조사하며 그 중 정확히 'ab'와 일치하는 위치가 있었는지를 확인해야 합니다. 이때 for loop을 [0, length - 2] 에서만 돌아야 함에 유의합니다. 이는 비교시에 i + 1 위치의 문자를 조회하기 때문입니다.

s = 'appleabanana'
length = len(s)
start_idx = -1

for i in range(length - 1):
    if s[i] == 'a' and s[i + 1] == 'b':
        start_idx = i
        break

print(start_idx)    
 

하지만 python에서는 index이라는 키워드를 제공합니다. index 함수 이용시 유의해야 할 점은, 부분 문자열이 없는 경우에는 다음과 같이 ValueError가 발생한다는 것입니다.

s = 'appleabanana'
print(s.index('bbb'))

>> ValueError: substring not found
 

따라서 index 함수는 꼭 in 키워드와 함께 사용해야 합니다. in으로 미리 부분문자열이 있는지 확인하고, 있다면 해당 위치를 찾는 식으로 진행하면 됩니다. 이때 부분문자열이 여러 개 있는 경우라면, 가장 앞선 위치를 반환해줍니다.

s = 'appleabanana'

if 'ab' in s:
    print(s.index('ab'))
else:
    print(-1)

>> 5
 

python의 문자열에서는 find()라는 함수를 제공하여 위의 문제를 더 간단히 해결할 수 있습니다. 이 함수는 해당 부분 문자열이 없는 경우에는 -1을, 있는 경우에는 가장 앞에 나오는 부분 문자열의 위치를 반환해주므로 정확히 저희과 원하는 함수입니다. 따라서 다음과 같이 간결하게 해결이 가능합니다.

s = 'appleabanana'
print(s.find('bob'))

>> -1