파이썬 슬라이싱에 대한 좋은 설명이 필요합니다(참조는 플러스).
구문은 다음과 같습니다.
a[start:stop] # items start through stop-1
a[start:] # items start through the rest of the array
a[:stop] # items from the beginning through stop-1
a[:] # a copy of the whole array
step
위의 모든 항목과 함께 사용할 수 있는 값 도 있습니다.
a[start:stop:step] # start through not past stop, by step
기억해야 할 요점은 값 이 선택한 슬라이스에 없는:stop
첫 번째 값을 나타낸다는 것입니다 . 따라서 와 의 차이는 선택한 요소의 수입니다( 이 1이면 기본값).stop
start
step
다른 기능은 음수 start
이거나 음수stop
일 수 있다는 것입니다. 즉, 시작이 아닌 배열의 끝에서 계산됩니다. 그래서:
a[-1] # last item in the array
a[-2:] # last two items in the array
a[:-2] # everything except the last two items
마찬가지로 step
음수일 수 있습니다.
a[::-1] # all items in the array, reversed
a[1::-1] # the first two items, reversed
a[:-3:-1] # the last two items, reversed
a[-3::-1] # everything except the last two items, reversed
파이썬은 당신이 요구하는 것보다 적은 항목이 있다면 프로그래머에게 친절합니다. 예를 들어, 요청 a[:-2]
하고 a
하나의 요소만 포함하는 경우 오류 대신 빈 목록이 표시됩니다. 때로는 오류를 선호하므로 이런 일이 발생할 수 있음을 알아야 합니다.
slice
개체 와의 관계
slice
객체 는 슬라이싱 작업을 나타낼 수 있습니다. 예 :
a[start:stop:step]
는 다음과 같습니다.
a[slice(start, stop, step)]
Slice 객체는 와 유사하게 인수의 수에 따라 약간 다르게 작동합니다 . range()
즉, 둘 다 slice(stop)
지원 slice(start, stop[, step])
됩니다. 주어진 인수 를 지정하는 것을 건너뛰려면 를 사용할 수 None
있습니다 .a[start:]
a[slice(start, None)]
a[::-1]
a[slice(None, None, -1)]
:
- 기반 표기법은 간단한 슬라이싱에 매우 유용 하지만 slice()
객체를 명시적으로 사용하면 프로그래밍 방식으로 슬라이싱을 생성할 수 있습니다.
Python 튜토리얼 에서 이에 대해 설명합니다(슬라이싱에 대한 부분이 나올 때까지 아래로 스크롤).
ASCII 아트 다이어그램은 슬라이스 작동 방식을 기억하는 데에도 유용합니다.
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
슬라이스가 작동하는 방식을 기억하는 한 가지 방법은 인덱스 가 문자 사이 를 가리키는 것으로 생각하는 것입니다 . 첫 번째 문자의 왼쪽 가장자리는 0으로 번호가 매겨져 있습니다. 그런 다음 n개의 문자열에서 마지막 문자의 오른쪽 가장자리 는 인덱스 n 을 갖 습니다.
시퀀스에 대한 문법이 허용하는 가능성 열거 x
:
>>> x[:] # [x[0], x[1], ..., x[-1] ]
>>> x[low:] # [x[low], x[low+1], ..., x[-1] ]
>>> x[:high] # [x[0], x[1], ..., x[high-1]]
>>> x[low:high] # [x[low], x[low+1], ..., x[high-1]]
>>> x[::stride] # [x[0], x[stride], ..., x[-1] ]
>>> x[low::stride] # [x[low], x[low+stride], ..., x[-1] ]
>>> x[:high:stride] # [x[0], x[stride], ..., x[high-1]]
>>> x[low:high:stride] # [x[low], x[low+stride], ..., x[high-1]]
물론 이면 (high-low)%stride != 0
끝점은 보다 약간 낮을 것 high-1
입니다.
음수 이면 stride
카운트다운 중이므로 순서가 약간 변경됩니다.
>>> x[::-stride] # [x[-1], x[-1-stride], ..., x[0] ]
>>> x[high::-stride] # [x[high], x[high-stride], ..., x[0] ]
>>> x[:low:-stride] # [x[-1], x[-1-stride], ..., x[low+1]]
>>> x[high:low:-stride] # [x[high], x[high-stride], ..., x[low+1]]
확장 슬라이싱(쉼표 및 타원 포함)은 주로 NumPy와 같은 특수 데이터 구조에서만 사용됩니다. 기본 시퀀스는 이들을 지원하지 않습니다.
>>> class slicee:
... def __getitem__(self, item):
... return repr(item)
...
>>> slicee()[0, 1:2, ::5, ...]
'(0, slice(1, 2, None), slice(None, None, 5), Ellipsis)'
'파이썬' 카테고리의 다른 글
[Python] 'for' 루프를 사용하여 사전 반복 (0) | 2022.07.31 |
---|---|
[Python] 목록에서 항목의 인덱스 찾기 (0) | 2022.07.31 |
[Python] @staticmethod와 @classmethod의 차이점 (0) | 2022.07.31 |
[Python] 목록 목록에서 플랫 목록을 만드는 방법은 무엇입니까? (0) | 2022.07.31 |
[Python] 'for' 루프에서 인덱스 액세스 (0) | 2022.07.31 |