본문 바로가기

컴퓨터/자료구조와 함께 배우는 알고리즘 입문

5. 멤버십 연산자와 표준 라이브러리를 사용한 문자열 검색

1. 멤버십 연산자로 구하기

 

substring in string 형식으로 표현하며, bool type로 반환한다.

string = 'abcccc'
print('abc' in string)
>>> True

print('abc' not in string)
>>> False

2. finx, index 계열 함수로 구현하기

 

2-1 str.find(sub[, start[, end]])

여기서 [ ] 안은 생략할 수 있다는 의미이다. 즉, str.find(substr) 또는 str.find(substr, start) 또는 str.find(substr, start, end)를 이용하여 find 함수를 이용할 수 있다.

 

여기서 str안에 substr이 포함되면 str 중 가장 작은 인덱스 값이 반환되며, 그렇지 않으면 -1이 반환된다.

 

string = 'abcccabc'
print(string.find('abc'))
>>> 0

string = 'abcccabc'
print(string.find('abc', 4))
>>> 5

string = 'abcccabc'
print(string.find('abc', 2, 6))
>>> -1

2-2 str.rfind(sub[, start [, end]])

 

string의 맨 끝 요소부터 탐색을 시작하여 substr을 발견하면 substr의 첫 번째 인덱스를 반환한다.

str.find와 마찬가지 방식이지만 다른 점은 str 중 가장 큰 인덱스 값이 반환된다는 차이점이 있다.

 

string = 'abccccc'

# substr이 한개라면 find()와 rfind()로 반환되는 인덱스값은 같다.
print(string.find('abc'))
>>> 0

print(string.rfind('abc'))
>>> 0
string = 'abccabccabc'

# substr이 두개 이상이라면 find는 그 중 인덱스 값이 가장 낮은 값을, rfind는 가장 큰 값을 반환한다.
print(string.find('abc'))
>>> 0

print(string.rfind('abc'))
>>> 8

start, end를 통해 탐색 범위를 설정하는 방법은 find()와 같다.

 

2-3 str.index(sub[, start [, end]])

 

find()와 같은 기능을 하지만 find()와는 다르게 substr이 발견되지 않으면 ValueError를 발생시킨다.

string = 'abcccc'
print(string.index('abc'))
>>> 0

string = 'abcccc'
print(string.index('abc', 3))
>>> ValueError: substring not found

2-4 str.rindex(sub[, start [, end]])

 

rfind()와 같은 기능을 하지만 rfind()와는 다르게 substr가 발견되지 않으면 ValueError를 발생시킨다.

string = 'abccccabc'
print(string.rindex('abc'))
>>> 6

print(string.rindex('abc', 0, 3))
>>> 0

print(string.rindex('abc', 3, 5))
>>> ValueError: substring not found

 

3. with 계열 함수로 구현하기

 

3-1 str.startswith(prefix[, start [, end]])

 

문자열이 지정된 prefix로 시작하면 True, 그렇지 않으면 False를 반환한다. start가 있으면 그 위치에서 검사를 시작하고, end가 있으면 해당 위치에서 비교를 중단한다.

string = 'abccccabc'
print(string.startswith('abc'))
>>> True

print(string.startswith('abc', 3))
>>> False

print(string.startswith('abc', 6))
>>> True

3-2 str.endswith(prefix[, start [, end]])

 

문자열이 지정된 prefix로 끝나면 True, 그렇지 않으면 False를 반환한다. start가 있으면 그 위치에서 검사를 시작하고, end가 있으면 해당 위치에서 비교를 중단한다.

string = 'abccccabc'
print(string.endswith('abc'))
>>> True

print(string.endswith('abc', 6))
>>> True

print(string.endswith('abc', 2, 5))
>>> False

 

출처:

https://python.flowdas.com/library/stdtypes.html?highlight=find#str.find

 

내장형 — 파이썬 설명서 주석판

다음 섹션에서는 인터프리터에 내장된 표준형에 관해 설명합니다. 기본 내장 유형은 숫자, 시퀀스, 매핑, 클래스, 인스턴스 및 예외입니다. 일부 컬렉션 클래스는 가변입니다. 제자리에서 멤버��

python.flowdas.com