IT

시퀀스 첨자를 붙일 때 Python에서 ::(이중 콜론)이란 무엇입니까?

itgroup 2022. 11. 8. 21:47
반응형

시퀀스 첨자를 붙일 때 Python에서 ::(이중 콜론)이란 무엇입니까?

걸 쓸 수 걸 요.string[3:4]Python에서만, Python에서 합니까?somesequence[::3]

'첫 번째 논쟁은 없고, 두 번째 논쟁은 없고, 세 개씩 뛰어오른다'는 뜻이다.시퀀스의 모든 항목을 잘라냅니다.확장 슬라이스가 당신이 원하는 것입니다.Python 2.3의 새로운 기능

는 Python으로 쓸 수.a[start:end:step]시작, 중지 또는 종료 중 하나를 드롭할 수 있습니다. a[::3]을 사용법을 사용하다

seq[::n]는 각 기사의 입니다.n전체 시퀀스 중 -번째 항목입니다.

예:

>>> range(10)[::2]
[0, 2, 4, 6, 8]

구문은 다음과 같습니다.

seq[start:end:step]

따라서 (Python 2에서는) 다음을 수행할 수 있습니다.

>>> range(100)[5:18:2]
[5, 7, 9, 11, 13, 15, 17]

설명.

s[i:j:k]설명서에 따르면 스텝 k에서i부터j까지의 s의 차이입니다.언제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]

3가지 아이템을 1개씩rd 가져가자,s:

>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]

3가지 아이템을 1개씩rd 가져가자,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]

3가지 아이템을 1개씩rd 가져가자,s[5:12]:

>>> s[5:12]
[5, 6, 7, 8, 9, 10, 11]
>>> s[5:12:3]
[5, 8, 11]

3가지 아이템을 1개씩rd 가져가자,s[:10]:

>>> s[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[:10:3]
[0, 3, 6, 9]

TL;DR

이 시각적 예에서는 NumPy 매트릭스(2차원 배열)에서 요소를 매우 즐겁게 선택하는 방법을 보여 줍니다(약속합니다).다음 2단계에서는 해당 '이중콜론'의 사용법을 설명합니다.

(은 " colon" ("double colon")의::여러 축에서 요소를 점프할 수 있습니다.에서는 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단계 접근으로 할 수 있습니다)

스텝 1 - 서브셋 취득

행 방향과 열 방향 모두에서 "시작 인덱스" 및 "끝 인덱스"를 지정합니다.

여기에 이미지 설명 입력

코드:

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]])

이제 간단한 시작 및 끝 인덱싱 기술을 사용하여 서브셋을 얻었습니다.그 다음에 '점프'를 어떻게 하는지...(계속 읽어주세요!)

스텝 2 - 요소 선택 ('점프 스텝' 인수 포함)

이제 다음과 같이 "점프 단계"를 행 방향과 열 방향 모두에서 지정할 수 있습니다('점프' 방식으로 요소를 선택).

여기에 이미지 설명 입력

코드(더블 콜론 주의):

In [7]: X3 = X2[::3, ::2]

In [8]: X3
Out[8]:
array([[23, 25, 27],
       [53, 55, 57],
       [83, 85, 87]])

필요에 따라 모든 요소를 선택했습니다. :)

순서 1(시작과 종료)과 순서 2('점핑')의 통합

이제 개념을 알게 되었습니다. 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]])

알았어!

Python에서 슬라이스를 할 때 세 번째 파라미터는 스텝입니다.다른 항목에서 설명한 것처럼 자세한 개요는 확장 슬라이스를 참조하십시오.

이 지식으로[::3]슬라이스에 대한 시작 또는 끝 인덱스를 지정하지 않았음을 의미합니다.스텝을 지정했으므로3, 이것은 모든 엔트리의 3번째 엔트리를 필요로 합니다.something첫 번째 색인부터 시작합니다.예를 들어 다음과 같습니다.

>>> '123123123'[::3]
'111'

또한 이 표기법을 사용자 지정 클래스에서 사용하여 원하는 대로 수행할 수 있습니다.

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자세한 내용은 다음 URL을 참조하십시오.Ellipsis 객체의 기능

세 번째 파라미터는 스텝입니다.따라서 [:3]는 목록/문자열의 세 번째 요소마다 반환됩니다.

내가 놓쳤나? 아니면 아무도 그 말을 하지 않았나?[::-1]여기?

# Operating System List
systems = ['Windows', 'macOS', 'Linux']
print('Original List:', systems)

# Reversing a list  
#Syntax: reversed_list = systems[start:stop:step] 
reversed_list = systems[::-1]

# updated list
print('Updated List:', reversed_list)

출처 : https://www.programiz.com/python-programming/methods/list/reverse

기초가 무엇인가를 기억한다a[start:end:step]수단입니다. 거기서부터a[1::2]모든 홀수 지수를 얻어서a[::2]매회 균등하게 하다a[2::2]2시부터는 짝수지만a[2:4:2]2시에 시작해서 4시에 끝나는 짝수 게임을 한다.https://stackoverflow.com/a/3453102/1601580에서 영감을 얻음

Python은 ::를 사용하여 End, Start 및 Step 값을 구분합니다.

언급URL : https://stackoverflow.com/questions/3453085/what-is-double-colon-in-python-when-subscripting-sequences

반응형