Python

파이썬의 문자열 - 1편(len, find, rfind)

총알 2024. 6. 8. 12:06
728x90

어제는 파이썬의 숫자열에 대해서 알아보았으니 오늘은 파이썬의 문자열에 대해서 알아보려고 한다.

 

파이썬으로 문자열을 표현할 수 있는 방법은 아래와 같이 총 4가지가 있다.

str1 = "Hello Python"           ##큰 따옴표로 둘러싸기
str2 = 'Life is Good'           ##작은 따옴표로 둘러싸기
str3 = """Come grow with us"""  ##큰 따옴표 3쌍으로 둘러싸기
str4 = '''No pain, No Gain'''   ##작은 따옴표 3쌍으로 둘러싸기

print("str1 의 출력 결과: %s" %str1)
print("str2 의 출력 결과: %s" %str2)
print("str3 의 출력 결과: %s" %str3)
print("str4 의 출력 결과: %s" %str4)

 

 

출력 결과는 아래와 같다.

str1 의 출력 결과: Hello Python
str2 의 출력 결과: Life is Good
str3 의 출력 결과: Come grow with us
str4 의 출력 결과: No pain, No Gain

 

4개 모두 동일한 출력 결과를 보여주고 있다.

그럼 언제 어떤 출력방식을 사용해야 하는지도 알아보자.

 

str2 = "Life's Good"

print("str2 의 출력 결과: %s" %str2)

Life is Good을 Life's Good으로 바꿔보자.

그렇게 되면 문자열에 작은따옴표가 들어가게 된다.

이럴 때는 작은따옴표를 사용하게 되면 에러가 발생한다.

그렇기 때문에 위와 같이 작은따옴표가 포함될 때는 큰 따옴표를 사용해야 한다. (출력 결과는 생략)

 

str1 = 'He said "Today is Saturday"'

print("str1 의 출력 결과: %s" %str1)

그럼 반대로 문자열에 큰따옴표를 넣고 싶을 땐 어떻게 해야 할까?

위와 같이 큰따옴표가 포함된 문자열을 작은따옴표로 감싸면 된다.

 

str1 = "Today is Saturday.\nIt is raining today.\nI like coffee."

print("str1 의 출력 결과: \n%s" %str1)

3개의 문장을 줄 바꿈을 이용해서 출력하려면 위와 같이 '\n'을 사용해서 줄 바꿈을 사용한다.

그런데 위와 같이 할 경우 가독성이 매우 떨어진다.

 

str1 = """Today is Saturday.
It is raining today.
I like coffee."""

print("str1 의 출력 결과: \n%s" %str1)

하지만 위와 같이 큰 따옴표를 3개 사용해서 소스코드상에서 실제로 줄 바꿈을 하면 가독성도 좋은 문자열로 만들 수 있다.

 

str1 의 출력 결과: 
Today is Saturday.
It is raining today.
I like coffee.

출력 결과는 위와 같다.

 

이어서 문자열의 연산에 대해서 알아보자

str1 = "Python "
str2 = "is very fun"
str_sum = str1 + str2

print("str_sum 의 출력 결과: \n%s" %str_sum)

문자열 str1과 str2을 2개를 위와 같이 더해서 문자열을 연결할 수 있다.

 

str_sum 의 출력 결과: 
Python is very fun

연결된 문자열은 위와 같다.

 

str1 = "Python "
str_multi = str1 * 3

print("str_multi 의 출력 결과: \n%s" %str_multi)

그리고 이어서 문자열의 곱하기에 대해서 알아보자.

위와 같이 문자열을 곱할 수도 있다.

 

str_multi 의 출력 결과: 
Python Python Python

출력 결과는 위와 같다.

 

str_header_tail = "=" *50
str1 = """
File: type.py
Author: Seo
Date: 08-06-2024
"""
str1_sum = str_header_tail + str1 + str_header_tail

print("str1_sum 의 출력 결과: \n%s" %str1_sum)

그럼 지금까지 배운 것들을 응용해서 코드를 작성해 보자

str1_sum 의 출력 결과: 
==================================================
File: type.py
Author: Seo
Date: 08-06-2024
==================================================

위와 같이 출력되는데, 파일의 첫 부분을 이와 같이 많이 작성을 한다.

일종의 프로그래머들의 사이에서의 약속이다.

파일 이름이 무엇이며, 누가 작성했고, 언제 작성되었는지 등의 내용을 알기 쉽게 파일의 맨 윗부분에 표시한다.

 

그럼 이어서 문자열의 인덱스를 확인하고 슬라이스 하는 방법에 대해서 알아보자.

 

문자열의 인덱스는 말 그대로 몇 번째 문자열인지를 확인하는 것이며 슬라이스 하는 방법은 말 그대로 문자열을 나누는 것을 의미한다.

 

str1 = "Apple, Banana, Cherry"
str1_len = len(str1)

print("str1의 문자열 길이: %d" %str1_len)

문자열을 구할 때는 len 함수를 사용한다.

출력 결과는 아래와 같다.

str1의 문자열 길이: 21

문자열의 길이는 Apple, Banana, Cherry의 길이를 나타내는데 공백까지 포함하게 되어있다.

시간이 넘쳐흐른다면 문자열의 길이를 실제로 세어보자. 21이 맞다 :)

 

str1 = "Apple, Banana, Cherry"

print("str1의 0번째 문자: %s" %str1[0])
print("str1의 9번째 문자: %s" %str1[9])
print("str1의 -3번째 문자: %s" %str1[-3])

그럼 이어서 문자열의 인덱스를 확인하는 방법을 알아보자.

str1의 문자열에서 몇 번째 인덱스에는 어떤 문자가 있는지 확인을 해보는 소스 코드이다.

하나의 문자를 확인하는 것이기 때문에 %c를 써도 되고 %s를 써도 상관없다.

 

str1의 0번째 문자: A
str1의 9번째 문자: n
str1의 -3번째 문자: r

출력 결과는 위와 같다.

파이썬은 C언어와 다르게 배열에 음수를 입력할 수가 있다.

어찌 되었든 인덱스 별로 문자를 출력할 수 있다.

 

이어서 문자열을 나누는 것을 해보자.

str1 = "Apple, Banana, Cherry"

print("str1의 첫번째 문자열: %s" %str1[0:5])
print("str1의 두번째 문자열: %s" %str1[7:13])
print("str1의 세번째 문자열: %s" %str1[15:21])

 

위와 같이 세 개의 문자열로 나누려고 하고 있다.

문자열을 나누는 방법은 문자열이름[나눌 문자열의 시작 인덱스:나눌 문자열의 마지막 인덱스-1]이다.

 

str1의 첫번째 문자열: Apple
str1의 첫번째 문자열: Banana
str1의 첫번째 문자열: Cherry

출력 결과는 위와 같다.

 

그런데 문자열을 나눌 때 이렇게 직접적으로 숫자를 입력하는 것은 좋은 방법은 아닌 것 같다.

그래서 우리는 find, rfind 함수를 사용해서 좀 더 전문적인 느낌이 나는 코딩 방법으로 나눠보도록 할 것이다.

 

find 함수와 rfind 함수의 사용방법은 아래와 같다.

 

문자열.find(찾을 문자열, 시작 index, 마지막 index)
시작 index, 마지막 index는 생략이 가능하다.
해당 문자열이 있을 경우: 0을 return
해당 문자열이 없을 경우: -1을 return

 

문자열.rfind(찾을 문자열, 시작 index, 마지막 index)
시작 index, 마지막 index는 생략이 가능하다.
해당 문자열이 있을 경우: 문자열의 시작 index를 return
해당 문자열이 없을 경우: -1을 return

 

그럼 사용방법을 알았으니 소스코드를 작성해 보자.

우리가 사용할 함수는 문자열의 위치를 알아야 하니까 rfind로 문자열의 위치를 찾아서 슬라이싱 해보자.

 

str1 = "Apple, Banana, Cherry"
str1_len = len(str1)
Banana_index = str1.rfind("Banana")
Cherry_index = str1.rfind("Cherry")

print("str1의 첫번째 문자열: %s" %str1[0:Banana_index-2])
print("str1의 두번째 문자열: %s" %str1[Banana_index:Cherry_index-2])
print("str1의 세번째 문자열: %s" %str1[Cherry_index:str1_len])

소스 코드는 위와 같다.

 

str1의 첫번째 문자열: Apple
str1의 두번째 문자열: Banana
str1의 세번째 문자열: Cherry

출력된 결과물은 위와 같은데 우리가 원하는 대로 잘 나눠진 것을 확인할 수 있다.

 

여기까지 문자열 관련된 기본적인 내용들을 알아보았는데

내용이 너무 많아져 2편으로 나눠서 다음 포스팅에서는 문자열 관련 함수를 알아보려고 한다.

728x90