티스토리 뷰

데이터 분석을 위해선 전처리 과정에서 Python 인덱싱(indexing)과 슬라이싱(slicing)을 많이 사용하게 된다. 사실 모든 언어에서 지원하는 개념이자 함수들이기 때문에 별도의 공부가 필요하지는 않지만, 그래도 햇갈릴 수 있는 부분을 정리해보고자 한다.



인덱싱 (indexing)

url이라는 변수에 "http://kj-said.tistory.com" 값을 할당을 한다. 

>>> url  = "http://kj-said.tistory.com"


>>> url

'http://kj-said.tistory.com'


>>> type

<class 'str'>


[0]부터 시작하게 된다. 그리고 [-1]은 뒤에서 부터 시작된다. [0] = [-0]기 때문이다.

>>> url[0]

'h'


>>> url[-0]

'h'


>>> url[-1]

'm'  








슬라이싱 (slicing)

인덱스를 통해서 접근하는 방법은 간략하게 알았고, [0]과 [-0]을 알 수 있었다. 사실 본 포스팅에서 진짜로 이야기하고자 하는 부분이 바로 이부분이다. 과연 slicing을 할 때, 어떻게 읽어야 할까? 자주하지 사용하지 않으면, 계속적으로 잊어버리는 flash memory 같은 내 두뇌를 위해서 아래 그림과 같이 정리를 하고자 한다.


>>> url[0:4]

'http'


>>> url[7:14]

'kj-said'


시작이 0인 경우는 그나마 쉽게 파악을 할 수 있다. 하지만, url[7:14]와 같은 경우에는 정확히 어떻게 가져올 지 유추가 한 번에 안될 때가 있다. 제시하는 방법은 2개가 있다. 개인적으로 편한 부분을 사용하면 될 것 같다. 나는 개인적으로 방법 2번을 사용한다. 엄연히 보면 결국 같은 개념이다. 그래도 이렇게 한 번 보면 다시는 잊어먹지 않을 것이라 생각이 든다.


방법1. 글자를 보지말고, 글자 사이 공백을 봐라.

글자에 index 번호가 있다고 생각하지 말고, 그 글자 앞의 공간에 index가 있다고 생각을 하는 방법이다. 공간이 아니라 글자에 index 번호를 할당하여 생각하는 경우에는 url[7:14]의 경우에 url[14]에 할당된 . 이라는 값이 왠지 포함이 되어야 할 것 같은 느낌이 든다. 14라는 숫자가 마음을 불편하게 하는 것이다. 하지만, 공간에 할당을 하면, 글자를 바라보지 않고 명확한 위치를 알려주기 떄문에 덜 햇갈릴 수 있다.



방법2. 부등식을 활용해라.

7 <= 글자 < 14, index 번호 7번부터 시작해서, 14번을 포함하기 전까지라는 개념으로 접근을 하면 좋다. index 7번인 k부터 index 14번 . 전까지의 글자 kj-said를 가져올 수 있다. 부등식으로 본다라는 생각을 하게 되면, 확실히 덜 햇갈릴 것이다. 


방법 2를 활용하면, 음 7부터 14전까지군 이렇게 생각을 하면, 손 쉽게 알 수 있다. 더 이상 고민할 필요가 없다! 그럼 몇 가지 예제를 통하여, 가지고 있는 방법이 잘 통용되나 확인을 해보자.

>>> url[:]

'http://kj-said.tistory.com'


>>> url[:14]

'http://kj-said'


>>> url[14:]

'.tistory.com' 


index 14번을 기준으로 자르면, 부등식을 기준으로 시작점은 포함이 되고, 끝 점은 포함이 되지 않기 때문에, 겹치는 부분이 없는 것을 확인할 수 있다. 만약 부등식이 <= 문자열 <= 이였다면, 14번째 글자 . 은 양쪽에 포함이 되었을 것이다.


그러면, 음수를 이용하여 끝부터 slicing 하는 경우에는 어떨까? 역시나 잘 도입이 되는 것을 확인 할 수 있다. -1에 해당하는 m이 포함되지 않는 것을 확인할 수 있다. 14번째 글자(.)부터 -1번째 글자(m)까지 말이다. 

 >>> url[14:-1]

'.tistory.co'


혹시나 시작점이 끝점보다 더 뒤에 있는 이런 경우는? syntax 오류를 뱉진 않지만, 값은 나오지 않는다. 그냥 부등호에 해당하는 값이 없기 때문이라고 생각을 하자

>>> url[8:6] 

''


별 내용은 아니지만, 한 번 정리하니까 더 이상 햇갈리진 않을 것 같다.