2016-11-30 1 views
-3

동일한 이름의 the post에 대한 허용 된 대답에 대해 의견을 말하고 싶지만 너무 초록색입니다.slice() 함수는 파이썬에서 무엇을합니까? (슬라이스 표기법과 비교)

답변 : "[x : y : z]는 [슬라이스 (x, y, z)]와 동일한 결과를 제공하지만 내 시도에서 사실을 입증하지 못하므로 더 깊은 이해를 원합니다. slice()와 슬라이스 표기법의 차이점.

다음과 같은 메시지 본문이있는 직렬 프로토콜이 있습니다 : Q0134CA24B.

그래서
>>> str = 'Q0134CA24B' 
>>> cmd = slice(0,1) 
>>> str[cmd] 
'Q' 
>>> cs = slice(-2,0) 
>>> str[cs] 
'' 
>>> cs 
slice(-2, 0, None) 
>>> str[cs] 
'' 
>>> str[-2:None:None] 
'4B' 

, 무엇이 내가 잘못하고있는 중이 야 : 그 프로토콜의 요소를 수집 할 경우

,이 작업을 수행하기가 매우 좋은 것? 슬라이스 표기법에 비해 slice()가 제한적입니까? 직렬 프로토콜로 자주 작업하고 slice()를 사용하여 문자 필드를 정의하는 것은이 표현을 전달할 수있는 비범 한 방법이 될 것이기 때문에 이것은 매우 유용합니다.

+2

문제를 이해하는 데 어려움이 있습니다. "a [x : y : z] 문은 [slice (x, y, z)]와 동일한 결과를 제공하지만 내 시도에서 사실을 입증하지 못합니다."- 어떤 시도도 보여주지 않습니다. 이 둘 사이의 불일치 ... – mgilson

+2

'a [x : y : z]'와 'a [slice (x, y, z)]'의 차이점을 표시하지 않는 테스트 – user2357112

+0

제목도 ... 거의 당신이 그것을 할 수있는 것처럼. –

답변

1

"정지"가 수정되었습니다.

두 표기법이 일치합니다. 0None을 혼동 할 수 있습니까? 0은 위치가 있으며, None은 그 부재입니다. 소스 코드 (Objects/sliceobject.c)을 인용하면, "시작, 중지 단계는 인덱스가 존재하지 나타내는 없음 파이썬 객체."

None0은 시작 위치에 대하여 동일하다. 반면 0 스톱

>>> s = 'Q0134CA24B' 
>>> s[:1] 
'Q' 
>>> s[0:1] 
'Q' 

"시퀀스의 끝으로"None 수단은 위치를 의미한다. 단계

>>> s = 'Q0134CA24B' 
>>> s[1:] 
'0134CA24B' 
>>> s[1:0] 
'' 

>>> s[::-1] # Simple 'reverse' trick 
'B42AC4310Q' 
>>> s[:None:-1] 
'B42AC4310Q' 
>>> s[:0:-1] 
'B42AC4310'  

None 하나를 의미하지만, 0이 잘못하고 ValueError을 올릴 것이다, 당신은 [ ] 표기 또는 slice()을 사용하는 경우 즉 동일합니다.

촬영하여 예 (str 변수에 대한 나쁜 이름) : 거기에 어떤 모순이 없습니다

>>> s = 'Q0134CA24B' 
>>> cmd = slice(0,1) 
>>> s[cmd] 
'Q' 
>>> s[0:1] 
'Q' 

>>> cs = slice(-2,0) 
>>> s[cs] 
'' 
>>> s[-2:0] 
'' 
>>> cs 
slice(-2, 0, None) 

>>> s[-2:None:None] 
'4B' 
>>> s[-2::] 
'4B' 
>>> cd = slice(-2,None,None) 
>>> str[cd] 
'4B' 

.

+0

첫 번째 줄과 종류 설명에 대한 오해의 근본 원인에 대해 많은 의견을드립니다. .하지만 오류가 정말 어리 석다. – kc64

+1

"For length ..."- 아니요, 길이 매개 변수가 없습니다. 중지 및 길이가 섞여 있습니다. 중지 값 0을 선택하면 길이 0의 하위 시퀀스를 선택하는 것이 아니라 원본 시퀀스의 인덱스 0에서 끝나는 하위 시퀀스를 의미합니다. – user2357112

+0

@ user2357112 : oops - 사용자가 올바르게 편집되었습니다. – cdarke

관련 문제