코딩/파이썬

파이썬 슬라이싱, 인덱싱

일호15 2021. 8. 23. 15:15
# 슬라이스(slice)는 조각을, 인덱스(index)는 검지손가락을 의미한다.

# 슬라이싱은 조각조각 자르는 것을, 인덱싱은 검지로 무언가를 가리키는 것을 의미한다.

 

 

안녕하세요~ 일호15 입니다! 저는 파이썬을 처음 배울 때, 슬라이싱이 가장 어렵게 느껴졌는데요. 이번 포스팅에서 완벽하게 해치우겠습니다.

 

이번 포스팅은 초심자에게 어렵게 느껴질 수 있을 것 같아요. 마음의 준비 하시고, 큰 산 한번 넘어보겠습니다.

 

b = ['가위', '바위', '보']

예시는 리스트를 기준으로 작성할 것이며, 문자열에 대해서도 슬라이싱 원리는 같습니다. 

 

 

1 0부터

더보기
b = ['가위', '바위', '보']

 

b[0] == '가위' 이다. 순서상 첫번째인데, 왜 1이 아닌 0부터 시작하는걸까? 사용자는 외워서라도 써먹기만 하면 그만이지만, 파이썬을 만든 사람은 왜 규칙을 이렇게 정했을까?

 

b[0:2] == ['가위', '바위'] 이다. 0 이상 2 미만이라는 표현은 정체가 뭘까.

 

 

2 음수

더보기
b = ['가위', '바위', '보']

 

파이썬에서는 음수 인덱싱, 슬라이싱 기능을 지원한다. 뒤에서부터 순서를 세는 것이다. b[-1] == '보' 다.

 

음수 인덱싱은 왜 만들었을까? 리스트의 요소가 57개 있다고 해보자. 마지막 요소의 위치를 찾으려면, 요소의 총 갯수가 57개임을 확인하고 나서야 인덱싱할 수 있다. 하지만 뒤에서부터 순서를 센다면, 간단해질 여지가 있다.

 

여담이지만, 이는 정말 멋진 아이디어인 것 같다. 한쪽에서만 출발하다가, 출발점을 양쪽 끝으로 잡은 것이다. 왼쪽의 0은 (+) 방향으로, 오른쪽의 0은 (-) 방향으로 향하는 출발점이 된다. 양 끝의 0은 무슨말이지? 잠시 후 만나볼 수 있다.

 

 

3 슬라이싱

더보기
b = ['가위', '바위', '보']

 

b[0:1] == ['가위'] 이다. 0 이상 1 미만이라고 배웠지만, 뭔가 미심쩍다. 이쯤에서 본격적으로 리스트 b를 자세히 살펴보자.

 

b = ['가위', '바위', '보']

빨간색 콤마를 1번, 파란색 콤마를 2번이라고 해보자. 그러면 다음과 같이 생각해 볼 수 있다.

 

b = [ 0 '가위' 1 '바위' 2 '보' 3 ]

이를 바탕으로 슬라이싱을 다시 생각해보면, 느낌이 올 것이다. b[0:1] == ['가위'] 가 맞는 듯 하다.

 

b = [ 0 '가위' 1 '바위' -1 '보' 0 ]

b[0:-1] == ['가위', '바위'] 이다.

 

 

4 인덱싱

더보기
b = [ 0 '가위' 1 '바위' 2 '보' 3]

 

슬라이싱 b[0:1]에서 0과 1은 각각 절단선을 의미한다. 0번과 1번 부분이 잘려 남은 조각이 ['가위']인 것이다.

 

b[0]은 리스트의 요소 그 자체를 가리키는 반면, b[0:1]에서 숫자가 가리키는 것은 요소들 사이의 절단선이다. 피아노의 흰 건반이 인덱싱이라면, 슬라이싱은 검은 건반 느낌으로 보면 될 것 같다.

 

이 지점에서 혼동의 여지가 생긴다. 인덱싱과 슬라이싱에서 사용되는 숫자들의 의미가 같지 않다면, 무엇을 기준으로 삼을 것인가?

 

슬라이싱을 개념적으로 이해했다면, 인덱싱의 흰 건반을 기준 삼는 것이 좋다. [::-1] 슬라이싱하는 경우에, 헷갈릴 여지를 없애기 위해서다. 이상과 미만, 이하와 초과. 수학적으로 표현한다면 ●ㅡ○ 쯤 될 것이다. 포함과 미포함을 나타낸 그림이다.

 

 

연어[0:1]

 

 

>>> b = [1, 2, 3]
>>> c = b[::-1]

>>> print(c)
[3, 2, 1]

 

반응형