파이썬의 find() 메서드는 하나의 문자열 안에서 특정 문자열이 처음 등장하는 인덱스 위치를 찾아줍니다. 값을 찾지 못하면 -1을 반환하고, 찾으면 해당 값이 시작되는 인덱스 위치를 반환합니다.
문자열에서 부분 문자열(substring)을 찾는 것은 파이썬에서 매우 흔한 작업입니다. 예를 들어 좋아하는 책 제목 목록이 담긴 문자열이 있다면, 그 목록에서 특정 책을 찾고 해당 책이 나타나는 위치를 알고 싶을 수 있습니다.
바로 이럴 때 파이썬 문자열 find() 메서드가 유용합니다. find() 메서드를 사용하면 문자열 내에서 부분 문자열을 검색할 수 있으며, 해당 부분 문자열이 처음 등장하는 인덱스 위치를 반환합니다.
이 튜토리얼에서는 예제와 함께 파이썬 문자열 인덱싱의 기본 개념을 먼저 살펴보고, 이어서 find() 메서드를 사용해 더 큰 문자열에서 부분 문자열을 찾는 방법을 알아보겠습니다.
파이썬 인덱싱 기본 복습
파이썬 문자열은 하나 이상의 개별 문자로 구성된 시퀀스(sequence)입니다. 문자열에는 글자, 공백, 기호, 숫자 등이 포함될 수 있습니다.
다음 문자열을 살펴보겠습니다:
company = "Career Karma"
이 문자열은 12개의 문자로 구성되어 있으며, 각 문자는 문자열 내에서 고유한 위치(인덱스)를 가집니다. 아래는 이 문자열의 인덱스 구성표입니다:
| C | a | r | e | e | r | K | a | r | m | a | |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 |
파이썬 find() 메서드란?
파이썬 find() 메서드는 한 문자열 안에서 특정 문자열이 처음 나타나는 위치를 찾습니다. 값을 찾지 못하면 -1을 반환합니다. find()는 파이썬 index() 메서드와 매우 비슷하지만, index()는 값을 찾지 못하면 예외(exception)를 발생시킨다는 점이 다릅니다.
find() 메서드의 문법은 다음과 같습니다:
string_name.find(string_to_find, start, end)
find() 메서드는 세 개의 매개변수를 받습니다:
- string_to_find: 문자열에서 시작 인덱스를 찾고자 하는 부분 문자열입니다. (필수)
- start: 검색을 시작할 인덱스 위치입니다. 기본값은 0입니다. (선택)
- end: 검색을 종료할 인덱스 위치입니다. (선택)
find() 메서드는 해당 문자열이 처음 등장하는 가장 낮은 인덱스를 반환합니다. 검색하는 부분 문자열이 문자열 안에 존재하지 않으면 -1이 반환됩니다.
if 문을 사용해 반환값이 -1인지 확인할 수 있습니다. 이렇게 하면 찾고자 하는 값을 찾지 못했을 때 발생할 수 있는 상황을 미리 처리할 수 있습니다.
find() 메서드의 문법을 익혔으니, 이제 실제 사용 예제를 살펴보겠습니다.
파이썬 find() 예제
예제 1: 문자열 찾기
동네 아이스크림 가게에서 가장 잘 팔리는 맛 목록이 담긴 문자열이 있다고 가정해 보겠습니다.
이 문자열은 다음과 같습니다:
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
데이터는 문자열 형태(따옴표로 표시)로 저장되어 있습니다.
이번에는 "Cookies and Cream"이 문자열의 어디에 위치하는지 찾고 싶다고 해보겠습니다. 쿠키 앤 크림 맛이 얼마나 인기 있는지 더 자세히 분석하고 싶기 때문입니다. 이때 find() 내장 함수를 활용할 수 있습니다. 다음은 이 항목을 문자열에서 찾는 코드입니다:
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
cookies_and_cream = flavors.find("Cookies and Cream")
print(cookies_and_cream)
코드 실행 결과: 25
먼저 "flavors"라는 파이썬 변수를 선언했습니다. 이 변수에는 동네 아이스크림 가게에서 가장 인기 있는 맛 목록이 저장되어 있습니다.
그다음 find() 메서드로 목록에서 "Cookies and Cream"을 찾고, 반환된 값을 "cookies_and_cream" 변수에 할당했습니다.
코드가 25를 반환했다는 것은 "Cookies and Cream"이 목록에서 인덱스 25번 위치에서 시작한다는 의미입니다.
예제 2: 특정 인덱스부터 검색 시작하기
이번에는 "Choc Chip"이 목록에서 "Cookies and Cream" 뒤에 나오는지 확인하고 싶다고 가정해 보겠습니다. "Cookies and Cream"이 인덱스 25에서 시작한다는 것을 이미 알고 있으므로, 그 위치 이후에서만 "Choc Chip"을 검색하면 됩니다.
다음 코드를 사용할 수 있습니다:
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
choc_chip = flavors.find("Choc Chip", 25)
print(choc_chip)
코드 실행 결과: 55. find()를 사용해 "flavors" 문자열에서 "Choc Chip"을 찾았으며, 두 번째 매개변수로 25를 지정해 검색 시작 위치를 정했습니다.
"Choc Chip"이 "Cookies and Cream" 뒤에 나타나기 때문에 양수가 반환되었습니다. 이 값이 바로 목록에서 "Choc Chip"이 나타나는 인덱스 위치입니다.
예제 3: 특정 범위 사이에서 검색하기
이번에는 "Buttered Pecan"이 "Cookies and Cream" 앞에 나오는지 검색해 보겠습니다. "Cookies and Cream"이 인덱스 25에서 시작하므로, 그 지점 이후는 검색할 필요가 없습니다. 다음 코드를 사용할 수 있습니다:
flavors = "Vanilla, Buttered Pecan, Cookies and Cream, Chocolate, Choc Chip, Strawberry"
buttered_pecan = flavors.find("Buttered Pecan", 0, 25)
print(buttered_pecan)
코드 실행 결과: 9. 이 예제에서는 find()로 문자열에서 "Buttered Pecan"을 찾았으며, 검색 시작 위치는 0, 종료 위치는 25로 지정했습니다.
"Buttered Pecan"이 "Cookies and Cream" 앞에 나타나기 때문에 양수가 반환되었으며, 이 값은 문자열에서 "Buttered Pecan"의 인덱스 위치입니다.
파이썬 find() vs index() 비교
파이썬 find()와 index() 메서드는 모두 문자열에서 값의 인덱스 위치를 반환합니다.
두 메서드의 핵심 차이점은, index()와 달리 find()는 값을 찾지 못했을 때 예외를 발생시키지 않고 -1을 반환한다는 것입니다. 따라서 별도의 오류 처리 없이도 값이 존재하지 않을 경우의 로직을 손쉽게 구현할 수 있습니다.
마무리
파이썬 find() 메서드를 사용하면 문자열 안에서 부분 문자열을 간편하게 찾을 수 있습니다. index() 메서드와 비슷하지만, index()는 값을 찾지 못하면 예외를 발생시키는 반면 find()는 -1을 반환한다는 점이 다릅니다.
이 튜토리얼에서는 예제를 통해 문자열 인덱싱의 기본 개념과 파이썬 find() 메서드의 사용법을 살펴보았습니다. 이제 find() 메서드를 활용해 전문가처럼 문자열에서 부분 문자열을 검색할 준비가 되셨습니다!
파이썬 학습 리소스와 추천 강좌에 대한 추가 정보가 필요하다면, 파이썬 학습 가이드를 참고해 보세요.