답변:
그것은 '첫 번째 논쟁에는 아무것도없고, 두 번째 논쟁에는 아무것도없고, 세 번 뛰는 것'을 의미합니다. 시퀀스의 세 번째 항목을 슬라이스로 가져옵니다. 확장 슬라이스 는 원하는 것입니다. Python 2.3의 새로운 기능
range(10)[::3]
outputs[0, 3, 6, 9]
::
[n ::]와 같이 누가 앞에 오게됩니까? 무엇을 의미 n
합니까?
seq[::n]
n
전체 시퀀스에서 각- 번째 항목의 시퀀스입니다.
예:
>>> range(10)[::2]
[0, 2, 4, 6, 8]
구문은 다음과 같습니다.
seq[start:end:step]
그래서 당신은 할 수 있습니다 :
>>> range(100)[5:18:2]
[5, 7, 9, 11, 13, 15, 17]
s[i:j:k]
인 설명서에 따라 , "단계 K와 J 행 I에서의 슬라이스". 때 i
와 j
존재하며, 전체 시퀀스 가정하므로되어 s[::k]
"모든 k 번째 항목은"수단.
먼저 목록을 초기화합시다 :
>>> s = range(20)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
다음에서 세 번째 항목을 모두 보자 s
.
>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]
다음에서 세 번째 항목을 모두 보자 s[2:]
.
>>> s[2:]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> s[2::3]
[2, 5, 8, 11, 14, 17]
다음에서 세 번째 항목을 모두 보자 s[5:12]
.
>>> s[5:12]
[5, 6, 7, 8, 9, 10, 11]
>>> s[5:12:3]
[5, 8, 11]
다음에서 세 번째 항목을 모두 보자 s[:10]
.
>>> s[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[:10:3]
[0, 3, 6, 9]
이 시각적 예는 NumPy Matrix (2 차원 배열)에서 요소를 깔끔하고 즐겁게 선택하는 방법을 보여줍니다 (약속합니다). 아래 2 단계는 해당 "이중 콜론"의 사용법을 보여줍니다 ::
.
(주의 : 이것은 ::
여러 축에서 요소를 점프하기위한 "이중 콜론"의 사용 사례를 설명하기위한 NumPy 배열 특정 예제입니다 .이 예제에서는와 같은 기본 Python 데이터 구조를 다루지 않습니다 List
.)
다음과 같은 NumPy 행렬이 있다고 가정 해보십시오.
In [1]: import numpy as np
In [2]: X = np.arange(100).reshape(10,10)
In [3]: X
Out[3]:
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25, 26, 27, 28, 29],
[30, 31, 32, 33, 34, 35, 36, 37, 38, 39],
[40, 41, 42, 43, 44, 45, 46, 47, 48, 49],
[50, 51, 52, 53, 54, 55, 56, 57, 58, 59],
[60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
[70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
[80, 81, 82, 83, 84, 85, 86, 87, 88, 89],
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]])
어떤 이유로 든 상사가 다음 요소를 선택하기를 원합니다.
"하지만 어떻게 ???"... 계속 읽어보세요! (2 단계 접근 방식으로이 작업을 수행 할 수 있습니다)
"시작 색인"및 "종료 색인"을 행 방향 및 열 방향으로 지정하십시오.
코드에서 :
In [5]: X2 = X[2:9,3:8]
In [6]: X2
Out[6]:
array([[23, 24, 25, 26, 27],
[33, 34, 35, 36, 37],
[43, 44, 45, 46, 47],
[53, 54, 55, 56, 57],
[63, 64, 65, 66, 67],
[73, 74, 75, 76, 77],
[83, 84, 85, 86, 87]])
이제 간단한 시작 및 끝 인덱싱 기술을 사용하여 하위 집합을 얻었습니다. 다음으로, 그 "점프"를 수행하는 방법 ... (읽기!)
이제 다음과 같이 "점프 단계"를 행 방향 및 열 방향으로 지정할 수 있습니다 ( "점프"방식으로 요소를 선택).
코드에서 (이중 콜론에 유의하십시오) :
In [7]: X3 = X2[::3, ::2]
In [8]: X3
Out[8]:
array([[23, 25, 27],
[53, 55, 57],
[83, 85, 87]])
필요에 따라 모든 요소를 선택했습니다! :)
이제 개념을 알았으므로 1 단계와 2 단계를 하나의 통합 된 단계로 쉽게 결합 할 수 있습니다.
In [9]: X4 = X[2:9,3:8][::3,::2]
In [10]: X4
Out[10]:
array([[23, 25, 27],
[53, 55, 57],
[83, 85, 87]])
끝난!
X[2:9,3:8][::3,::2] = 0
(0으로 표시된 항목을 대체합니다). X
다시 입력 하면 표시된 모든 항목이로 설정됩니다 0
.
자신 만의 커스텀 클래스에서이 표기법을 사용하여 원하는대로 할 수 있습니다.
class C(object):
def __getitem__(self, k):
return k
# Single argument is passed directly.
assert C()[0] == 0
# Multiple indices generate a tuple.
assert C()[0, 1] == (0, 1)
# Slice notation generates a slice object.
assert C()[1:2:3] == slice(1, 2, 3)
# If you omit any part of the slice notation, it becomes None.
assert C()[:] == slice(None, None, None)
assert C()[::] == slice(None, None, None)
assert C()[1::] == slice(1, None, None)
assert C()[:2:] == slice(None, 2, None)
assert C()[::3] == slice(None, None, 3)
# Tuple with a slice object:
assert C()[:, 1] == (slice(None, None, None), 1)
# Ellipsis class object.
assert C()[...] == Ellipsis
그런 다음 슬라이스 객체를 다음과 같이 열 수 있습니다.
s = slice(1, 2, 3)
assert s.start == 1
assert s.stop == 2
assert s.step == 3
이것은 Numpy에서 다차원 배열을 모든 방향으로 슬라이스하기 위해 특히 사용됩니다.
물론, 제정신 API는 ::3
일반적인 "모든 3"의미와 함께 사용해야합니다 .
관련은 Ellipsis
:에 추가로 덮여 줄임표 객체가 무엇입니까?
Python은 ::를 사용하여 End, Start 및 Step 값을 구분합니다.
[5::]
. 그렇다면 5의 의미는 무엇입니까?