파이썬 문자열을 사용하는 방법

파이썬 문자열을 사용하는 방법

문자열 사용법

파이썬 문자열을 사용하는 여러가지 방법이 존재한다. 이 글에서는 문자열 작동에 기본이 되는 세 가지 방식을 공부해보려한다.

세 가지 방식은 다음과 같다.
  1. 결합(concatenation) - 두 문자열을 합친다.
  2. 인덱싱(indexing) - 문자열에서 단일 문자를 구한다.
  3. 슬라이싱(slicing) - 단 한번에 문자열에서 여러 문자를 구한다.

문자열 합치기(String Concatenation)

두 개의 문자열을 + 연산자를 사용해 결합될 수 있다.

>>> string1 = "abra"
>>> string2 = "cadabra"
>>> magic_string = string1 + string2
>>> magic_string
'abracadabra'

string1string2+를 사용해 결합되고 magic_string이란 변수에 할당되었다. 두 문자열을 합쳤어도 둘 사이에는 공백이 존재하지 않는다는 것을 주목해야한다.

성과 이름을 합치는 것처럼 관계가 있는 두 문자열을 합칠 수도 있다.

>>> first_name = "Arthur"
>>> last_name = "Dent"
>>> full_name = first_name + " " + last_name
>>> full_name
'Arthur Dent'

중간에 공백 하나를 포함한 문자열까지 총 두번의 문자열을 합치는 작업이 실행되면서 풀네임이 완성되었다.


문자열 인덱싱(String Indexing)

문자열의 각 문자는 인덱스(index)라고 불리는 번호가 매겨진 위치를 가진다. 문자열 다음에 두 개의 괄호([ and ])를 입력하고 그 안에 특정 위치의 번호를 넣어줌으로써 특정 문자에 접근할 수 있다.

>>> flavor = "apple pie"
>>> flavor[1]
'p'

위치 1에서 p가 리턴되어 의아할 수도 있지만, 파이썬을 포함한 대부분의 다른 프로그래밍 언어에서는 숫자를 셀 때 보통 0부터 시작한다. 즉, 맨 앞에 위치한 문자를 접근하고 싶다면 위치 0으로 접근하면 된다.

>>> flavor[0]
'a'
문자열 "apple pie"의 인덱스는 다음과 같다.
Image from Python Basics

만약 주어진 문자열을 넘긴 인덱스에 접근하려고 한다면 파이썬은 IndexError를 일으킨다.

>>> flavor[9]
Traceback (most recent call last):
	File "<pyshell#4>", line 1, in <module>
		flavor[9]
IndexError: string index out of range

쉽게 생각해서, 문자열의 최대 인덱스는 문자열 길이 - 1이라고 생각하면 된다. 'apple pie'가 총 9글자인데 최대 인덱스는 8인 것처럼 말이다.

또한, 문자열은 음수 인덱스도 지원한다.

>>> flavor[-1]
'e'

문자열 마지막 문자의 음수 인덱스는 -1이다. 마지막에서 두 번째는 -2이고 계속 이런식으로 이어진다.

문자열 "apple pie"의 음수 인덱스는 다음과 같다.
Image from Python Basics

음수로 위치를 접근 할 때도 인덱스가 없으면 IndexError를 일으킨다.

>>> flavor[-10]
Traceback (most recent call last):
	File "<pyshell#5>", line 1, in <module>
		flavor[-10]
IndexError: string index out of range

문자열 슬라이싱(String Slicing)

문자열 "apple pie"에서 처음 세 단어만 필요하다고 가정하면, 각 문자를 인덱스로 접근하고 합치는 작업을 다음과 같이 수행할 수 있다.

>>> first_three_letters = flavor[0] + flavor[1] + flavor[2]
>>> first_three_letters
'app'

하지만, 이렇게 간단히 첫 세 단어가 아닌, 더 많은 작업이 필요할 상황이 있을 수 있는데, 파이썬에서는 고맙게도 이 부분을 해결할 수 있는 방법을 제공한다.

파이썬에서는 괄호 안에 두 인덱스 숫자를 넣고 그 두 숫자를 콜론(:)으로 나누어줌으로써 문자열의 부분을 추출할 수 있다. 이 방식을 substring이라고 부른다.

>>> flavor = "apple pie"
>>> flavor[0:3]
'app'

위 코드에서 [0:3] 부분이 바로 슬라이스(slice)라고 불린다. 문자열 슬라이싱에서 헷갈릴 수 있는 부분 하나는, 첫 인덱스는 반환하는 문자열에 포함하지만 두 번째 인덱스는 포함되지 않는다는 것이다. 그렇기때문에, flavor[0:3]으로 슬라이싱 했을 때에도 두 번째 위치한 3번 인덱스 'l'이 포함되지 않은 것이다.

첫 번째 인덱스 누락

문자열 슬라이싱을 할 때 첫 인덱스가 누락되면 파이썬에서는 '코드가 인덱스 0부터 실행되기를 원하는구나'라고 가정한다. 즉, 다음의 코드는 flavor[0:5]과 동일하다.

>>> flavor[:5]
'apple'

두 번째 인덱스 누락

만약 두 번째 인덱스가 누락한다면, 파이썬은 처음 인덱스부터 문자열의 마지막 문자까지 슬라이스 한다.

>>> flavor[5:]
' pie'

모든 인덱스 누락

첫 번째와 두 번째, 두 인덱스가 모두 누락되어 있다면 문자열 전체를 리턴한다.

>>> flavor[:]
'apple pie'

여기서 한 가지 주목할 점은, 문자열 인덱싱과는 다르게 슬라이싱을 할 때에는 바운더리를 벗어나도 IndexError가 발생하지 않는다는 것이다.

>>> flavor[:14]
'apple pie'
>>> flavor[13:15]
''

문자열은 변경될 수 없다.

파이썬에서 문자열은 불변객체이다. 즉, 문자열을 일단 생성했으면 그 문자열은 변경될 수 없다는 것이다. 다음과 같이, 문자열의 특정 문자에 새로운 문자를 할당하려고 할 때 파이썬에서 TypeError를 일으키는 것을 확인할 수 있다.

>>> word = "goal"
>>> word[0] = "f"
Traceback (most recent call last):
	File "<pyshell#16>", line 1, in <module>
		word[0] = "f"
TypeError: 'str' object does not support item assignment

만약, 문자열을 변경하고 싶다면 다음과 같이 새로운 문자열을 생성하고 문자를 합치기 위해 슬라이싱과 함께 사용되야한다.

>>> word = "goal"
>>> word = "f" + word[1:]
>>> word
'foal'

Reference