파이썬3의 문자열은 내부적으로 (유니코드) 문자의 배열로 취급된다. 예를 들어보자.


>>> s=“Hello World”


문자열

H

e

l

l

o


w

o

r

l

d

인덱스 (기본 방향)

0

1

2

3

4

5

6

7

8

9

10

인덱스 (역방향)

-11




-7

-6

-5

-4

-3

-2

-1


문자열에 포함된 각각의 문자에 매겨진 이 번호를 인덱스(index)라고 한다. 이 예에서 문자열의 길이는 11이고  인덱스는 0부터 시작한다. 인덱스가 1부터 시작하지 않고 0부터 시작함에 주의해야 한다. (다른 프로그래밍 언어에서도 배열의 인덱싱은 보통 0부터 시작한다.)


>>> s[0]

H

>>> s[6]

w

>>> s[-1]

d


마지막의 s[-1]과 같이 음수는 뒤에서부터 세는 것이다. 따라서 뒤에서 첫 번째 문자인 ‘d’가 된다.


>>> s[-2]

l

>>> s[-6]


만일


>>>  a=”python is the best.”


라는 문자열에서 첫 단어를 뽑아내고 싶다면 아래와 같이 한다.


>>> b=a[0:6]


인덱스 ‘0:6’ 이 뜻하는 것은 ‘0부터 5까지’ 이다. 끝 번호 6은 포함하지 않는다는 것에 주의해야 한다. 이렇게 콜론(:)을 이용하여 연속적인 인덱스를 지정하는 것을 슬라이싱(slicing)이라고 한다. 문자열의 마지막까지 지정하려면 끝 번호를 생략하면 된다.


>>> c = a[7:] # ‘is the best.’ 가 c에 저장된다.


반대로 시작 번호가 생략되면 문자열의 처음부터 선택된다.


>>> d = a[:8] # ‘python is’ 가 d에 저장된다.


그리고 시작 번호와 끝 번호가 모두 생략된다면, 즉 e=a[:] 이라고 하면 문자열 전체가 선택이 된다. 즉, e에는 a 문자열 전체가 저장된다.


슬라이싱에서도 인덱싱과 마찬가지로 음수를 사용할 수 있다.


>>> f = a[:-5]


결과를 확인해 보기 바란다. 이 경우에도 끝 번호는 포함되지 않으므로 첫 문자부터 -6번 문자까지 뽑아져서 f에 저장된다. 슬라이싱을 정리하면 다음과 같다.


  • s[m:n] 은 s[m] 부터 s[n-1] 까지의 부분 문자열이다.


예를 들어서 만약 문자열 h를 5번째 문자를 기준으로 둘로 나눠서 hl, hr에 정하고 싶다면 다음과 같이 하면 될 것이다.


>>> hl = h[:5]
>>> hr = h[5:]


이러한 기능을 이용해서 문자열 자체를 바꿀 수는 없다는 것에 주의하자. 즉, 다음과 같이 문자열의 일부분을 바꾸는 것은 불가능한다.


>>>a[0] = ’x’ #불가능하다


이는 문자열은 한 번 내용이 정해지면 내용을 읽는 수는 있지만 변경될 수는 없는 자료형이기 때문이다. (이러한 자료형을 immutable 하다고 한다.)




Posted by 살레시오
,