파이썬에서 제공하는 list, tuple, str은 시퀀스형이 슬라이싱 연산을 지원하고, 이번 블로그에선 고급 사용법을 알려고 한다.
많은 사람들이 마지막 항목이 연산되지 않는 다는 것은 알지만 왜인지는 모를 것이다.
연산이 되지 않는 이유는 관례상 인덱스 번호가 0부터 시작하는 파이썬, C등의 언어에서 잘 작동한다.
장점
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]