본문 바로가기
Python/Python FAQ

Python 파이썬에서 슬라이싱 작동 방식, How slicing in python works

by 베타코드 2023. 5. 4.
반응형

질문


Python의 슬라이스 표기법은 어떻게 작동하나요? 즉, a[x:y:z], a[:], a[::2] 등과 같은 코드를 작성할 때, 어떤 요소가 슬라이스에 포함되는지 이해하는 방법은 무엇인가요? 적절한 참조를 포함해주세요.


표기법의 디자인 결정에 대한 논의를 위해서는 Why are slice and range upper-bound exclusive?를 참조하십시오.

슬라이싱의 가장 일반적인 실제 사용 사례인 리스트에서 매 N번째 항목 가져오기 (그리고 이 문제를 해결하는 다른 방법)에 대해서는 Pythonic way to return list of every nth item in a larger list를 참조하십시오. 적절한 경우 이 질문을 중복 대상으로 사용하십시오.

슬라이스 할당에 대한 더 구체적인 답변은 How does assignment work with list slices?를 참조하십시오 (이것도 여기에서 다루어짐).


답변


구문은 다음과 같습니다:

a[start:stop]  # 시작부터 stop-1까지의 항목
a[start:]      # 시작부터 배열의 나머지 항목
a[:stop]       # 처음부터 stop-1까지의 항목
a[:]           # 전체 배열의 사본

또한 위의 모든 것과 함께 사용할 수 있는 step 값이 있습니다:

a[start:stop:step] # start부터 stop을 지나치지 않고 step으로

기억해야 할 중요한 점은 :stop 값이 선택한 슬라이스에 포함되지 않는 첫 번째 값이라는 것입니다. 따라서 stopstart의 차이는 선택한 요소의 수입니다 (step이 1이면 기본값).

다른 기능은 start 또는 stop음수 일 수 있다는 것입니다. 이는 시작이 아닌 배열의 끝에서 계산된다는 것을 의미합니다. 그래서:

a[-1]    # 배열의 마지막 항목
a[-2:]   # 배열의 마지막 두 항목
a[:-2]   # 마지막 두 항목을 제외한 모든 것

마찬가지로, step은 음수 일 수 있습니다:

a[::-1]    # 모든 항목을 반대로 뒤집은 배열
a[1::-1]   # 처음 두 항목을 반대로 뒤집은 배열
a[:-3:-1]  # 마지막 두 항목을 반대로 뒤집은 배열
a[-3::-1]  # 마지막 두 항목을 제외한 모든 항목을 반대로 뒤집은 배열

파이썬은 요청한 항목보다 항목이 적을 경우 프로그래머에게 친절합니다. 예를 들어, a[:-2]를 요청하고 a에 항목이 하나만 포함되어 있으면 오류 대신 빈 목록이 반환됩니다. 때로는 오류를 원할 수 있으므로 이러한 상황에 대해 인식해야합니다.

slice 객체와의 관계

slice 객체는 슬라이싱 작업을 나타낼 수 있습니다. 즉:

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)]과 동일합니다.

: 기반 표기법은 간단한 슬라이싱에 매우 유용하지만 slice() 객체의 명시적 사용은 슬라이싱의 프로그래밍적 생성을 간소화합니다.

반응형

댓글