slicing 이해하기

2023. 3. 29. 19:48프로그래밍

728x90

 

a[start:stop]  # start 에서 stop-1까지의 요소들
a[start:]      # start 에서 배열의 나머지까지 요소들 
a[:stop]       # 처음부터 stop - 1 까지 요소들
a[:]           # 전체 배열의 복사본
 

step 값이라는 것이 있는 데, 위의 어떤 값들과도 사용 가능 합니다:

a[start:stop:step] # start에서 stop 까지 step으로 진행
 

다음은 주피터 노트북에서 돌려 보았습니다.

 

기억해야 할 주요점은 :stop 값이 선택한 슬라이스 안에 있지 않은 첫 번째 값을 나타낸다는 것입니다. 따라서 stop와 start의 차이는 선택한 요소의 수가 됩니다(단계가 1인 경우 기본값).

다른 특징은 start 또는 stop가 음수일 수 있다는 것입니다. 즉, 배열의 시작 부분이 아니라 끝 부분부터 계산됩니다. 그래서:

a[-1]    # 배열의 마지막 요소
a[-2:]   # 배열의 마지막 두 개의 요소
a[:-2]   # 마지막 두 개의 요소를 제외한 모든 요소
 

이와 비슷하게 step 도 또한 음수 값을 가집니다:

a[::-1]    # 반전 된 배열 내의 모든 요소들
a[1::-1]   # 반전 된 첫 두 개의 요소 
a[:-3:-1]  # 반전 된 끝 두 개의 요소
a[-3::-1]  # 반전 된 끝 두 개의 요소를 제외한 모든 요소
 

 

 
 

파이썬은 당신이 원한 것보다 요소가 적다면 프로그래머에게 친절합니다.

예를 들어, a[:-2]를 요청하고 a가 하나의 요소만 포함하는 경우 오류 대신 빈 목록이 표시됩니다.

때론 당신이 오류가 나는 것을 더 선호한다면, 이런 일이 발생할 수 있음을 알고 있어야 합니다.

 

슬라이스 개체와의 관계

슬라이스 객체는 슬라이스 연산을 표현 할 수 있습니다. 즉:

a[start:stop:step]
 

는 다음과 동일 합니다.

a[slice(start, stop, step)]
 

슬라이스 객체는 또한 range()와 유사하게 인수의 수에 따라 약간 다르게 동작합니다.

즉, slice(stop) 및 slice(start, stop[, step])를 모두 지원합니다.

주어진 인수 지정을 건너뛰려면 None을 사용할 수 있습니다.

  • a[start:]는 a[slice(start, None)]과 같고
  • a[::-1]은 a[slice(None, None, -1)]과 같습니다.

:-based 표기법은 단순 슬라이싱에 매우 유용하지만, 슬라이스() 객체를 명시적으로 사용하면 프로그래밍 방식의 슬라이싱 생성을 간단하게 합니다.

 

이상.

728x90