프로그래밍/Python

<22.02.24> Python 다시 배우기 #01. 문자열 함수

mayberry 2022. 2. 24. 16:41

 나는 Python을 배웠지만 막상 코딩을 하고 백준에서 알고리즘을 풀면 어정쩡하다는 느낌을 지울 수가 없었다. 정말 기초적인 문법은 배웠지만 딱 거기까지인 느낌.. 이는 내가 공부를 꼼꼼히 하지 않은 탓이라고 밖에 생각할 수 밖에 없다. 그래서 오늘부터라도 모자란 Python 지식을 채우고자 Python 카테고리를 개설하고 포스팅을 하려고 마음 먹었다. 오늘은 문자열 함수에 대해 포스팅하고자 한다. 

 

굳이 문자열 함수에 대해 포스팅하려고 하는 이유는, 백준 알고리즘을 풀면서 문자열 문제 때문에 고생을 좀 했기 때문이다.. 편리한 메소드가 있는데 이상한 삽질만 한 시간 정도 한게 너무 부끄러워서.. ㅠ

 

포스팅에서 알아볼 문자열 관련 메소드 및 함수는 아래와 같다.

 

1. count

2. find / rfind

3. upper / lower / swapcase

4. capitalize

5. title

6. strip

7. replace

 

1. count 메소드

 

해당 메소드는 문자열 내에서 특정 문자열이 몇 개 포함되어있는지를 확인할 수 있는 메소드다. 시작 인덱스와 끝 인덱스를 설정하여 원하는 범위 내에 찾고자 하는 문자열이 몇 개 있는지를 확인할 수 있다.

 

string.count( 찾고자 하는 문자열, 시작 인덱스, 끝 인덱스 )

 

위와 같은 형태로 사용할 수 있는 간단한 메소드이다. 찾고자 하는 문자열은 필수 입력 사항이라 빨간색으로 처리를 해놓았다. 빨간색으로 처리 되어 있지 않은 인자는 필수사항은 아니다. 앞으로 소개하는 메소드에 대해서도 위와 같은 처리를 하겠다.

 

 

2행은 string에 포함된 'My'라는 단어의 수를, 3행은 string의 네 번째 인덱스부터 'My'라는 단어를 찾는다. 4행은 string의 4 번째 인덱스부터 10번째 인덱스 범위에 있는 'My'의 개수를 찾는 것이다. 실행 결과는 아래와 같다.

 

실행 결과

 

2. find / rfind 메소드

 

 count 메소드가 문자열 내 특정 단어의 개수를 출력했다면, find와 rfind 메소드는 특정 단어의 인덱스를 출력하는 메소드이다. 사용법은 count와 동일하다.

 

string.find( 찾고자 하는 문자열, 시작 인덱스, 끝 인덱스 )

string.rfind( 찾고자 하는 문자열, 시작 인덱스, 끝 인덱스 )

 

 find와 rfind 메소드의 경우에도 시작 인덱스와 끝 인덱스를 설정할 수 있으며, 마찬가지로 필수 입력 사항은 아니다.

실행 결과는 아래와 같다.

 

실행 결과

'My'라는 문자열은 string에서 6번째 인덱스에 위치함을 알 수 있다. Python의 문자열은 공백도 인덱스에 포함된다. 그런데 이상하지 않은가? string에서는 'My'가 총 두 번 들어가는데 6번째 인덱스만 나왔다. 26번째 인덱스도 나와야 하는데 말이다. 

 

그렇다. find 메소드는 찾고자 하는 문자열의 인덱스를 보여주지만, 찾고자 하는 문자열이 중복될 경우 첫 번째로 등장하는 인덱스만 보여준다.  바로 다음에 소개하려는 rfind 메소드도 마찬가지다.

 

rfind는 찾고자 하는 문자열이 마지막으로 등장한 인덱스를 보여준다. 코딩 화면과 실행결과 화면은 아래와 같다.

 

실행 결과

4행 코드문의 경우 인덱스 4에서 10까지로만 범위를 한정했기 때문에 6번 인덱스를 출력한 것이다. 정리하자면, 문자열 내에서 특정 문자열의 위치를 찾고 싶을 때 find/rfind를 사용할 수 있다. 하지만 find는 처음으로 등장하는 인덱스만, rfind는 마지막으로 등장하는 인덱스만 출력한다는 점이 차이다.

 

3. upper / lower / swapcase

 

문자열이 알파벳으로 이루어져 있을 경우, 소문자를 대문자로, 대문자를 소문자로 바꾸어주는 메소드이다. 사용법은 매우 간단하다. 

 

string.upper()

string.lower()

string.swapcase()

 

 인자를 받지 않는 메소드이다. upper의 경우 소문자를 대문자로 바꾸어주며, lower은 반대이다. swapcase의 경우 해당 메소드가 문자열이 소문자인지 대문자인지 자동으로 판별하여 반대의 케이스로 바꾸어준다. 예시문과 실행문은 아래와 같다.

 

 

실행 결과

대문자와 소문자가 혼합된 7번째 행의 경우 swapcase 메소드를 사용하였더니 기존에 작성했던 문자열의 소문자와 대문자가 모두 뒤바뀌어 출력되었다. 해당 메소드들은 return 값이 있는 메소드이기 때문에 메소드 적용 이후에도 변환된 결과로 사용하고 싶다면 별도의 변수를 선언해야 한다. 예시는 아래와 같다.

 

 

메소드만 실행하고 string을 출력했을 경우 아래와 같이 upper 메소드가 적용되지 않았음을 알 수 있다.

 

 

4. strip

 

strip 메소드는 문자열의 좌측과 우측에 있는 특정 문자를 제거해준다. lstrip과 rstrip 메소드도 존재하나 strip 메소드 하나로 설명한다. lstrip은 좌측의 문자를 제거해주고, rstrip은 우측의 문자를 제거해준다. 단지 그 뿐이다. strip 메소드의 사용법은 아래와 같다.

 

string.strip( 제거하고자 하는 문자 )

 

인자로 들어가는 문자는 공백으로 놔두어도 된다. 공백으로 놔둘 경우 좌우측에 있는 공백을 제거하겠다는 의미다. 사용 방법은 아래와 같다.

 

1행에서 3행까지의 예시는 좌측과 우측에 있는 't'를 제거해주기 위함이다. 5행부터는 좌우측에 있는 공백을 제거해주기 위함이다.  실행결과는 아래와 같다.

 

1행에서 3행까지의 구문을 통해 좌우측의 t가 사라진 것을 확인할 수 있다. 실행결과의 두 번째 행은 string2의 여백을 보여주기 위해 테스트용으로 출력했다. strip 메소드를 활용하여 공백을 제거한 결과가 그 아랫줄이다.

 

5. replace

 

replace 메소드는 기존 문자열에서 특정 문자열로 변경하고 싶을 때 사용할 수 있는 메소드다. 사용 방법은 아래와 같다.

 

string.replace( 기존 문자, 신규 문자, 바꾸고자 하는 문자 수 )

 

replace 메소드의 첫 번째 인자를 두 번째 인자로 바꾼다고 생각하면 된다. 마지막 인자는 기존 문자가 여러개일 경우, 일부만 변경하고 싶을 때 입력할 수 있다. 사용 방법은 아래와 같다.

 

string에는 'this'가 두 번 들어간다. 3행에서는 'this'를 'that'으로 바꾸고자 한다. 이 때, 세 번째 인자가 들어가지 않았기 때문에 string에 포함된 모든 'this'를 수정한다. 4행의 경우에는 1개의 'this'만 'that'으로 수정하겠다는 의미다. 실행 결과는 아래와 같다.

 

 

P. S 조잡한 글 읽어주셔서 감사합니다! 혹시 틀린 부분이 있다면 과감한 지적(하지만 욕은 삼가드립니다 ㅠ 부탁드려용) 부탁드립니다!