슬라이싱

매일 공부(ML)·2022년 11월 3일
0

Fluent Python

목록 보기
7/130

리스트

슬라이싱

파이썬에서 제공하는 list, tuple, str은 시퀀스형이 슬라이싱 연산을 지원하고, 이번 블로그에선 고급 사용법을 알려고 한다.

슬라이스와 범위 지정시에 마지막 항목이 포함되지 않는 이유

많은 사람들이 마지막 항목이 연산되지 않는 다는 것은 알지만 왜인지는 모를 것이다.

연산이 되지 않는 이유는 관례상 인덱스 번호가 0부터 시작하는 파이썬, C등의 언어에서 잘 작동한다.

장점

  • 세 개의 항목을 생성하는 것처럼 중단점만 이용해서 슬라이스나 범위를 지정할 때 길이를 계산하기 쉽다.
  • 시작점과 중단점을 모두 지정할 때도 길이를 계산하기 쉽고, 단지 중단점에서 시작점을 빼면 된다.
  • x인덱스를 기준으로 겹침없이 시퀀스를 분할하기 쉬우므로 my_list[:x]와 my_list[x:]로 지정하면 된다.
l= [10,20,30,40,50,60]
l[:2] #2번 인덱스에서 분할
l[2:]
l[3:]

슬라이스 객체

s[a:b:c]는 c 보폭만큼 항목을 건너 뛰게 만드는 거고 음수일 경우 거꾸로 거슬러 올라가서 항목을 반환한다.

[a:b:c]표기법

인덱스 연산을 수행하는 []안에서만 사용할 수 있기에, slice(a,b,c) 객체를 생성한다.
seq[start:stop:step] 표현식을 평가하기 위해서 파이썬은 seq.getitem_(sllice)start, stop, step))을 호출한다.


다차원 슬라이싱과 생략 기호

[] 연산자는 콤마로 구분해서 여러 개의 인덱스나 슬라이스를 가질 수 있다.

  • Numpy 외부 패키지에서 a[i,j]구문으로 2차원 numpy.ndarray 배열의 항목이나 a[m:n,k:l]구문으로 2차원 슬라이스를 가져올 때 사용한다.

  • [] 연산자를 처리하는 _getitem()과 setitem__() 특수 메서드는 a[i,j]에 들어 있는 인덱스들을 튜플로 받는다.

  • Numpy는 다차원 배열을 슬라이싱할 때 생략 기호를 사용한다.


슬라이스에 할당하기

할당문의 왼족에 슬라이스 표기법을 사용하거나 del 문의 대상 객체로 지정함으로써 가변 시퀀스를 연결하거나, 잘라 내거나, 값을 변경할 수 있다.

l = list(range(10))
l #[0,1,2,3,4,5,6,7,8,9]
l[2:5] = [20,30]
l #[0,1,20,30,5,6,7,8,9]
del l[5:7]
l#[0,1,20,30,5,8,9]
profile
성장을 도울 아카이빙 블로그

0개의 댓글