본문 바로가기
Study/Python

[Python] 문자열 탐색 메서드 index(), find() 비교

by ngool 2024. 7. 29.

본 포스트에서는 파이썬에서 문자열을 탐색하는 메서드인 index()와 find()를 비교해보겠습니다.

 

파이썬을 처음부터 복습하며 기초를 다지던 중 문자열 메서드에서 흥미로운 부분을 발견했습니다.

그것은 바로 index()find()인데요, 두 메서드는 같은 기능을 갖고 있지만 특정 상황에 반환되는 값이 다릅니다.


언제 쓰일까?

파이썬에서 문자열은 시퀀스 데이터 구조로, 문자열 내 각 글자 하나하나가 고유한 인덱스(번호)를 갖고 있습니다.

그렇기 때문에 코딩을 하다보면 이럴 때가 있습니다.

저 문자열 안에 'h'라는 글자가 몇 번째 인덱스에 있는지 궁금한데 어떻게 찾지?
반복문, 조건문을 써서 찾아야하나..?

 

위와 같은 상황에서 우리는 index(), find()라는 문자열 탐색 메서드를 사용할 수 있습니다.

string = 'hello'

# 찾고자하는 문자가 있을 때
print(string.find('h'))  # 0
print(string.index('h'))  # 0

 

위 코드의 실행 결과는 find(), index() 모두 'hello' 안에 'h'가 있는 위치인 0이 나옵니다.


index() vs find()

위 예제를 보고나면, 우리는 이런 질문이 생길 수 있습니다.

두 메서드의 기능이 같아 보이는데, 무슨 차이가 있는거지?

 

저 상황만 보면 완전히 기능이 같아보이죠. 그러나 우리는 한 가지 상황을 배제했습니다.

그것은 바로 '찾고자하는 문자가 해당 문자열에 존재하지 않을 때' 입니다.

 

코드로 직접 보면서 확인해봅시다.

string = 'hello'

# 찾고자하는 문자가 없을 때
print(string.find('H'))  # -1
print(string.index('H'))  # ValueError: substring not found

 

어떤가요?

find()의 경우, 'H'가 string 안에 없으니 -1을 반환했습니다.

그러나 index()는 에러를 발생시켰습니다.

 

바로 이것이 두 메서드의 차이입니다.


활용법

이 두 메서드의 차이를 알고 있다면, 상황에 따라 유연하게 활용할 수 있을 것 같습니다.

 

1. find() 메서드 활용 (with 조건문)

string = 'hello'
char = 'H'
pos = string.find(char)

if pos == -1:  # 찾고자하는 문자가 없을 때 (find 메서드가 -1을 반환했을 때)
    print(f'{string}에는 {char}가 없습니다.')
else:  # 찾고자하는 문자가 있을 때 (find 메서드가 문자의 인덱스를 반환했을 때)
    print(f'{string}에는 {char}{pos}번째에 있습니다.')

 

2. index() 메서드 활용 (with 예외처리)

string = 'hello'
char = 'H'

try:  # 찾고자하는 문자가 있을 때 (index 메서드가 ValueError를 발생시키지 않았을 때)
    pos = string.index(char)
    print(f'{string}에는 {char}{pos}번째에 있습니다.')
except ValueError:  # 찾고자하는 문자가 없을 때 (index 메서드가 ValueError를 발생시켰을 때)
    print(f'{string}에는 {char}가 없습니다.')

'Study > Python' 카테고리의 다른 글

[Python] 예외(exception)와 예외처리(exception handling)  (1) 2024.08.08
[Python] 패킹(packing), 언패킹(unpacking)  (0) 2024.07.31
[Python] Style Guide  (1) 2024.07.15
[Python] 클래스(class)  (0) 2024.06.27