[:]은 무슨 뜻인가요?


95

일부 Python 코드를 분석하고 있는데 무엇인지 모르겠습니다.

pop = population[:]

방법. Java의 배열 목록이나 2 차원 배열과 같은 것입니까?


1
관련, 목록 지우기는 pop.clear () ..가 아닌 del pop [:] 또는 pop [:] = []을 수행해야만 가능합니다 (딕셔너리와 마찬가지로).
— Macke

파이썬 조각의 좋은 SO 토론 : stackoverflow.com/questions/509211/...
— 스콧 C 윌슨

답변:


109

슬라이스 표기법의 예이며 population. 경우 population목록입니다,이 라인이 만들어집니다 얕은 복사 목록을. tuple또는 a 유형의 객체의 경우 str아무 작업도 수행하지 않으며 (라인이 없이도 동일하게 [:]수행됨) NumPy 배열의 경우 동일한 데이터에 대한 새 뷰를 생성합니다.


14
경우에 따라 슬라이스는 얕은 사본을 반환합니다.
— André Caron

4
@ilius : 아마도 l.copy()더 읽기 쉬울 수 있지만 작동하지 않습니다.
— Sven Marnach

13
list(l)항상 작동 더 읽을 수, 심지어 같은과 사본을 반환 보장numpy.array
— 로시 모순 어법

1
@Eli : 예, list.clear(). 그러나 이것이 SO에 대한 이러한 종류의 질문을 크게 줄일 때까지 약간의 시간이 걸릴 것입니다. :)
— Sven Marnach

1
@MichaelGraczyk : 여기서 NumPy 배열에 대해 이야기하고 있다고 가정합니다. 를 사용하는 것보다 A[deque(chain((k,), repeat(slice(None), len(A.shape) - 1)).rotate(axis)]거의 항상 선호합니다 numpy.rollaxis(A, axis, 0)[k]. 일반적으로 slice()객체 를 직접 생성해야하는 사용 사례는 거의 찾아 볼 수 없습니다 . 어쨌든 필요하다면 NumPy는 s_그것들을 생성하는 대체 방법으로 도우미를 제공 합니다.
— Sven Marnach 2014

27

일반적으로 목록 조각이 목록의 일부를 복사한다는 사실을 아는 것도 도움이 될 수 있습니다. 예 population[2:4]를 들어 인구 [2]와 인구 [3]을 포함하는 목록을 반환합니다 (슬라이스는 오른쪽 배타적 임). population[:]기본값은 각각 0과 길이 (인구) 이므로 왼쪽과 오른쪽 인덱스 를 제외하고 전체 목록을 선택합니다. 따라서 이것은 목록의 사본을 만드는 일반적인 관용구입니다.


15

음 ... 이것은 정말 상황에 따라 다릅니다. 궁극적으로 slice객체 ( slice(None,None,None))를 __getitem__, __setitem__또는 __delitem__. (실제로 객체 __getslice__에.__getitem__ 되지만 현재는 더 이상 사용되지 않으며 사용해서는 안됩니다.)

개체는 슬라이스로 원하는 작업을 수행 할 수 있습니다.

문맥 상에:

x = obj[:]

이것은 obj.__getitem__전달 된 슬라이스 객체로 호출 됩니다. 사실 이것은 완전히 다음과 같습니다.

x = obj[slice(None,None,None)]

(전자는 아마도 더 효율적일 것입니다. slice 생성자 -모두 바이트 코드로 수행됩니다).

대부분의 개체에서 이것은 시퀀스 일부의 얕은 복사본을 만드는 방법입니다.

다음:

x[:] = obj

항목을 설정하는 방법입니다 (호출 __setitem__)obj .

그리고 아마 당신이 무엇을 추측 할 수있을 것 같아요 :

del x[:]

;-)를 호출합니다.

다른 슬라이스를 전달할 수도 있습니다.

x[1:4]

구성 slice(1,4,None)

x[::-1]

구성 slice(None,None,-1)등. 추가 읽기 : Python의 슬라이스 표기법 설명



6

이미 존재하는 목록에 새 이름을 할당하는 대신 목록의 복사본을 만듭니다.


5

[:]
배열에서 리미터 또는 슬라이싱에 사용됩니다. 해시
예 :
[1 : 5] 1 포함과 5 제외 사이의 값을 표시하는 데 사용됩니다
. 즉, 1-4 [start : end]

기본적으로 분할을 위해 배열에 사용됩니다. 표시 할 값 또는 키이며 ":"은 전체 어레이를 패킷으로 제한하거나 분할하는 데 사용됩니다.


1
이미 5 개의 유사한 답변과 허용 된 답변이있는 오래된 질문을 범할 이유가 없습니다. 게다가 a[1:5]2-4가 아닌 1-4 요소를 반환합니다.
— Skamah One 2013

@SkamahOne 오, 모르겠어요. 이 경우는 아닐지 모르지만 죽은 질문을 제기하는 것이 가치있는 경우가 있습니다. 다른 통찰, 다른 표현 등등.이 경우 당신은 답을 고쳤고 그들은 희망적으로 무언가를 배웠습니다.
— Pryftan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.