2015년 5월 12일 화요일

파이썬(python) 문자열의 인덱싱과 슬라이싱

 파이썬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 하다고 한다.)

댓글 없음:

댓글 쓰기