본문 바로가기

Programing/Python

[Python 입문] 3. 파이썬 자료형 - 문자열 01

목차

  • 문자열(String)이란?
  • 문자열 만드는 방법
  • 이스케이프 코드란?
  • 문자열 연산하기
  • 문자열 인덱싱(Indexing)과 슬라이싱(Slicing)

문자열(String)

1. 문자열(String)이란?

 아래의 예시와 같이 문자들의 집합을 의미한다.

"Life is too short, You need Python"
"a"
"123"

 123과 같은 숫자도 보이지만 따옴표(" ")로 둘러싸여 있으면 모두 문자열이다. 파이썬에서 문자열을 만드는 방법은 4가지가 있다.

 

"Hello World"

'Python is fun'

"""Life is too short, You need Python"""

'''Life is too short, You need Python'''

 큰따옴표("a"), 작은따옴표('b'), 큰따옴표 3개("""c"""), 작은따옴표 3개('''d''')를 사용하는 방법이다.

 

 

2. 문자열 만드는 방법

문자열을 만드는 방법이 왜 4가지나 있을까?

 

2.1. 문자열에 작은따옴표가 포함될 때

Python's favorite food is perl

 위 소스코드에 보이는 문장에는 작은따옴표(')가 포함되어 있다. 이때 문자열을 아래 소스코드와 같이 큰따옴표(")로 둘러싸면 문자열 안에 들어있는 작은따옴표는 문자열을 나타내는 기호로 인식하지 않는다.

 

>>> food = "Python's favorite food is perl"
>>> food
"Python's favorite food is perl"

 프롬프트에 food를 입력해서 결과를 확인하면 변수에 저장된 문자열이 아래 소스코드와 같은 오류(SyntaxError) 없이 출력되는 것을 볼 수 있다.

 

>>> food = 'Python's favorite food is perl'
  File "<stdin>", line 1
    food = 'Python's favorite food is perl'
                   ^
SyntaxError: invalid syntax

 위 소스코드는 작은따옴표가 포함된 문자열을 작은따옴표로 둘러쌌기 때문에 발생하는 오류다.

 

2.2. 문자열에 큰따옴표가 포함될 때

"Python is very easy." he says.

 위소스 코드에 보이는 문장은 그(He)가 말한 내용을 포함한 문자로 큰따옴표(")가 포함되어 있다. 이때 문자열을 아래 소스코드와 같이 작은따옴표(')로 둘러싸면 문자열 안에 있는 큰따옴표는 문자열을 나타내는 기호로 인식하지 않는다.

>>> say = '"Python is very easy." he says.'

 

 위의 두 가지 방법 (작은따옴표, 큰따옴표 사용) 외에 아래와 같이 백슬래시(\)를 사용하는 방법이 있다.

>>> food = 'Python\'s favorite food is perl'
>>> say = "\"Python is very easy.\" he says."

 백슬래시(\)를 작은따옴표(')와 큰따옴표(") 앞에 넣어주면 백슬래시 뒤의 작은따옴표나 큰따옴표는 문자열을 나타내는 기호라는 의미가 아니라 문자 자체를 뜻하게 된다.

(사용할 일이 많을지 모르겠지만 가독성이 떨어지는 것 같다. 그냥 문장에 포함된 따옴표와 다른 따옴표를 사용하는 것이 더 깔끔하게 소스코드를 작성할 수 있을 것 같다...)

 

2.3. 여러 줄인 문자열을 변수에 대입하고 싶을 때

 아래 소스코드와 같이 여러 줄의 문자열을 변수에 대입하는 방법은 세 가지가 있다.

# 작은따옴표 3개(''') 사용
>>> multiline = '''
...Life is too short
...You need python
...'''

# 큰따옴표 3개(""") 사용
>>> multiline = """
...Life is too short
...You need python
..."""

# 이스케이프 코드 \n 사용
>>> multiline = "Life is too short\nYou need python"

 이스케이프 코드 중 문자열의 줄을 바꿀 때 사용하는 코드인 '\n'를 사용해 줄을 바꿀 수 있지만 가독성이 떨어지고 소스코드가 길어진다.

 위 세 가지 방법을 사용한 후 print(multiline)을 입력하면 아래와 같이 출력되는 것을 확인할 수 있다.

>>> print(multiline)
Life is too short
You need python

 

 

3. 이스케이프 코드란?

 문자열 예제 중 여러 줄의 문장을 처리할 때 이스케이프 코드 중 하나인 '\n'라는 코드를 사용했다. 이스케이프 코드는 프로그래밍을 할 때 사용할 수 있도록 미리 정의한 문자 조합을 말한다. 주로 출력을 보기 좋게 정렬하는 용도로 사용된다.

 여러 이스케이프 코드 중 가장 많이 사용하는 코드를 아래와 같이 몇가지만 정리해 본다.

\n 문자열 안에서 줄을 바꿀 때
\t 문자열 사이에 탭 간격을 줄 때
\\ 문자 \를 그대로 표현할 때
\' 문자열 안에 포함된 작은따옴표를 그대로 표현할 때
\" 문자열 안에 포함된 큰따옴표를 그대로 표현할 때

 

 

4. 문자열 연산하기

 파이썬에서 문자열을 더하고, 곱할 수 있다. (다른 언어에서는 쉽게 찾아볼 수 없는 기능이라고 한다.)

 

4.1. 문자열 더하거나 곱해서 연결하기

# 문자열 더해서 연결하기
>>> head = "Python"
>>> tail = " is fun!"   <---- is 앞의 띄어쓰기 주의 할 것
>>> head + tail
'Python is fun!'

# 문자열 곱하기
>>> a = "python"
>>> a * 2
'pythonpython'

 위 첫 번째 소스코드와 같이 'head'와 'tail' 변수를 더하기를 통해 연결할 수 있다.

 만약 tail 변수의 문자열을 "is fun!"으로 입력한다면 'Pythonis fun!'이라고 출력되니 띄어쓰기를 잘 확인해야 된다.

 

 두 번째 소스코드를 보면 앞서 숫자형에서 봤던 연산자인 곱하기(*)가 있다. 하지만 여기서는 곱하기의 뜻과는 다르다. a를 두 번 반복하라는 뜻이다.

 

4.2. 문자열 곱하기 응용

 문자열 곱하기를 응용해서 아래와 같은 소스코드를 에디터로 작성해서 Terminal에서 실행해본다.

print("=" * 50)
print("My Program")
print("=" * 50)
cd Documents/pythonProject/jumpToPython/02
python multistring.py
==================================================
My Program
==================================================

 결과는 위 소스코드와 같으며, 프로그램을 만들어 실행시켰을 때 출력되는 화면 상단에 프로그램의 제목 및 설명 등을 위와 같이 표시하면 가독성이 좋을 것이다.

 

 

5. 문자열 인덱싱(Indexing)과 슬라이싱(Slicing)

 인덱싱(Indexing)은 '가리킨다.'는 의미고, 슬라이싱(Slicing)은 '잘라낸다.'는 의미를 가지고 있다.

 

5.1. 문자열 인덱싱?

>>> a = "Life is too short, You need Python"

 위 소스코드를 보면 a라는 변수에 저장된 문자열이 있다. 이 문자열은 아래의 표와 같이 각 문자마다 번호를 가지고 있다.

L i f e   i s   t o o   s h o r t ,   Y o u   n e e d   P y t h o n
0                   1                   2                   3      
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3

 문자열 "Life is too short, You need Python"에서 L은 첫 번째 자리에 위치했기 때문에 0, 다음에 위치한 i는 1이라는 번호가 붙는다. 중간에 위치한  short 중 s는 12가 된다.

 

"파이썬은 숫자를 0부터 센다."

 그렇기 때문에 첫 번째의 문자를 출력하기 위해서는 a[1]이 아니라 a[0]을 입력해야 한다. 즉, a[번호]는 문자열 안에서 특정한 값을 출력하는 역할을 한다. 이것을 인덱싱(Indexing)이라고 한다.

>>> a = "Life is too short, You need Python"
>>> a[0]   <---- a 문자열 중 첫 번째 문자
'L'
>>> a[-1]  <---- a 문자열 중 마지막 문자
'n'
>>> a[-0]
'L'
>>> a[-5]  <---- a 문자열 중 뒤에서 다섯 번째 문자
'y'

 위 소스코드를 통해 인덱싱의 몇 가지 예를 볼 수 있다.

 a[-1]은 문자열 뒤에서 첫 번째가 되는 문자를 뜻한다. (다행히 문자열의 문자 개수를 일일이 확인할 필요가 없다.) 참고로 0과 -0은 똑같은 뜻이기 때문에 a[-0]은 a[0]과 똑같은 결과를 출력한다.

 

5.2. 문자열 슬라이싱?

>>> a = "Life is too short, You need Python"
>>> b = a[0] + a[1] + a[2] + a[3]
>>> b
'Life'

 위 소스코드의 방법으로 문자열 "Life is too short, You need Python"에서 한 문자만이 아닌  'Life'와 같은 단어 자체를 출력할 수 있다. 이렇게 단순하게 접근할 수 있지만 파이썬에서는 아래의 소스코드와 같이 슬라이싱(Slicing)이라는 기법으로 간단하게 출력할 수 있다.

>>> a = "Life is too short, You need Python"
>>> a[0:4]
'Life'

>>> a[0:3]
'Lif'

 그런데 인덱싱에서는 Life에서 'e'라는 문자만 출력하기 위해 a[3]을 입력했다. 이를 참고해 a[0:3]을 입력하면 두 번째 소스코드와 같다.

 이유는 a[시작 번호:끝 번호]를 입력하면 끝 번호를 포함하지 않는다. a[0:3]을 수식으로 나타내면 아래와 같다.

0 <= a < 3

 그렇기 때문에 a[0:3]에 만족하는 a는 a[0], a[1], a[2]만 해당된다.

 

>>> a[0:4]
'Life'
>>> 0:5]
'Life '

 위 소스코드와 같이 슬라이싱은 공백 문자 역시 동일하게 처리하기 때문에 'Life'와 'Life '는 완전 다른 문자기 때문에 주의해야 한다.

 이런 문자열 슬라이싱은 아래 소스코드와 같이 활용할 수 있다.

#시작 번호부터 그 문자열의 끝까지 출력
>>> a[19:]
'You need Python'

# 문자열의 처음부터 끝 번호까지 출력
>>> a[:17]
'Life is too short'

# 문자열의 처음부터 끝까지 출력
>>> a[:]
'Life is too short, You need Python'

 

5.3. 슬라이싱으로 문자열 나누기

# a 문자열을 두 부분으로 나누는 기법
>>> a = "20010331Rainy"
>>> date = a[:8]
>>> weather = a[8:]
>>> date
'20010331'
>>> weather
'Rainy'

# a 문자열을 연도, 월과 일, 날씨라는 세 부분으로 나누는 기법
>>> a = "20010331Rainy"
>>> year = a[:4]   <---- 문자열 처음부터 a[3]까지
>>> day = a[4:8]   <---- a[4]부터 a[7]까지
>>> weather = a[8:]   <---- a[8]부터 마지막까지
>>> year
'2001'
>>> day
'0331'
>>> weather
'Rainy'

 위 소스코드는 앞으로 자주 사용하게 되는 슬라이싱 기법 중 하나다.

 첫 번째 소스코드 중 a[:8]은 a[8]이 포함되지 않고, a[8:]은 a[8]을 포함하고 있다.

 두 번째 소스코드는 문자열을 연도, 월과 일, 날씨라는 세 부분으로 나누는 방법이다.

 

5.4. 'Pithon'이라는 문자열을 'Python'으로 바꾸려면?

 가장 쉽게 생각하는 방법이 a[1]이 i이니까 a[1]을 y로 바꿔 준다는 것이다. 하지만 문자열은 요소 값을 변경할 수 없는 값이다. (문자열, 튜플 등의 자료형은 요소 값을 변경할 수 없다.) 그렇기 때문에 아래의 소스코드와 같은 방법으로 변경할 수 있다.

# 제일 먼저 떠오르는 방법
>>> a = "Pithon"
>>> a[1]
'i'
>>> a[1] = 'y'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

# 정답
>>> a = 'Pithon'
>>> a[:1]
'P'
>>> a[2:]
'thon'
>>> a[:1] + 'y' + a[2:]
'Python'

 

 

내용 출처: 책 '점프 투 파이썬'의 내용