Unit 22. 문자열 응용하기

지금까지 리스트 사용 방법을 알아보았습니다. 리스트는 요소 여러 개가 모여 있었죠? 마찬가지로 문자열도 문자가 여러 개 모여 있는 상태라 리스트와 비슷한 점이 많습니다.

이번에는 문자열을 인덱스로 접근하는 방법과 문자열 서식, 문자열 메서드에 대해 알아보겠습니다.

22.1 문자열을 인덱스로 접근하기

문자열은 문자들이 일렬로 모여있는 상태입니다. 그래서 문자열(string)이라고 부릅니다. 문자열은 리스트처럼 인덱스로 접근하여 문자 하나를 가져올 수 있습니다.

  • 문자열[인덱스]
>>> hello = 'Hello, world!'
>>> hello[0]    # 첫 번째(인덱스 0) 문자 출력
'H'
>>> hello[4]    # 다섯 번째(인덱스 4) 문자 출력
'o'

문자열이 들어있는 변수에 [ ](대괄호)를 붙인 뒤 인덱스를 지정하면 해당 문자를 가져올 수 있습니다. 물론 리스트와 마찬가지로 문자열도 인덱스가 0부터 시작합니다. 따라서 문자열의 첫 번째 문자는 인덱스가 0입니다.

이번에는 문자열의 인덱스에 음수를 지정해보겠습니다.

>>> hello = 'Hello, world!'
>>> hello[-1]    # 마지막(인덱스 -1) 문자 출력(뒤에서 첫 번째)
'!'
>>> hello[-2]    # 마지막의 바로 앞(인덱스 -2) 문자 출력(뒤에서 두 번째)
'd'

hello[-1]와 같이 인덱스를 음수로 지정하면 문자열의 뒤에서부터 접근합니다. 즉, -1은 'Hello, world!'의 뒤에서 첫 번째 문자이므로 !, -2는 뒤에서 두 번째 문자이므로 d가 나옵니다(참고로 문자열을 묶은 따옴표는 문자열에 포함되지 않으므로 인덱스로 접근할 수 없습니다).

그럼 조금 응용해서 인덱스에 len을 조합해보겠습니다.

>>> hello = 'Hello, world!'
>>> hello[len(hello) - 1]    # 마지막(인덱스 12) 문자 출력
'!'

마지막 문자 !가 나왔습니다. 여기서 문자열의 인덱스는 0부터 시작하므로 len(hello)에서 1을 빼주어야 합니다. 즉, hello에 저장된 'Hello, world!' 문자열의 길이는 13인데 인덱스는 0부터 시작하므로 1을 빼주어야 마지막 문자가 나옵니다('Hello, world!'의 인덱스는 0부터 12까지).

지금까지 알아본 'Hello, world!' 문자열의 인덱스를 그림으로 표현하면 이런 모양이 됩니다.

그림 22-1 문자열의 인덱스
그림 25 1 문자열의 인덱스

물론 문자열을 인덱스로 접근할 때는 범위를 벗어나면 안됩니다. 문자열의 길이가 13이면 hello[13]은 인덱스의 범위를 벗어났으므로 에러가 발생합니다.

>>> hello = 'Hello, world!'
>>> hello[13]
Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    hello[13]
IndexError: string index out of range

그리고 또 한가지 중요한 점이 있습니다. 문자열은 인덱스를 지정하여 문자를 가져올 수는 있지만 =로 문자를 할당할 수는 없습니다.

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

따라서 문자열은 내용을 변경하는 방법이나 메서드를 제공하지 않습니다.