레이블이 슬라이싱인 게시물을 표시합니다. 모든 게시물 표시
레이블이 슬라이싱인 게시물을 표시합니다. 모든 게시물 표시

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