본 포스트에서는 파이썬에서 문자열을 탐색하는 메서드인 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 |