IT Share you

인덱스가 범위를 벗어난 부분 문자열 슬라이싱이 작동하는 이유는 무엇입니까?

shareyou 2020. 11. 8. 11:32
반응형

인덱스가 범위를 벗어난 부분 문자열 슬라이싱이 작동하는 이유는 무엇입니까?


'example'[999:9999]오류가 발생 하지 않습니까? 이후 'example'[9]않는, 그 뒤에 동기는 무엇인가?

이 동작 에서 두 가지 모두 동일한 문자열을 생성하더라도 'example'[3]본질적으로 / 내부적으로.와 동일하지 않다고 가정 할 수 있습니다 .'example'[3:4]'m'


맞아요! 'example'[3:4]'example'[3]시퀀스의 경계 외부 근본적으로 다른, 그리고 슬라이스 있습니다 (내장 기능에 대한 최소한) 오류가 발생하지 않습니다.

처음에는 놀라 울 수도 있지만 생각해 보면 말이됩니다. 인덱싱은 단일 항목을 반환하지만 슬라이싱은 항목의 하위 시퀀스를 반환합니다. 따라서 존재하지 않는 값을 인덱싱하려고하면 반환 할 항목이 없습니다. 그러나 경계를 벗어난 시퀀스를 슬라이스하면 여전히 빈 시퀀스를 반환 할 수 있습니다.

여기서 혼란스러운 부분은 문자열이 목록과 약간 다르게 동작한다는 것입니다. 목록에 동일한 작업을 수행하면 어떻게되는지보세요.

>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]

여기서 차이점은 분명합니다. 문자열의 경우 결과는 동일하게 보입니다. 파이썬에서는 문자열 외부에 개별 문자가 없기 때문입니다. 단일 문자는 1 자 문자열입니다.

(시퀀스 범위 밖에서 슬라이스하는 정확한 의미는 mgilson의 답변을 참조하십시오 .)


문서 의 강력한 섹션을 가리키는 답변을 추가하기 위해 :

같은 슬라이스 표현을 감안할 때 s[i:j:k],

k 단계에서 i에서 j까지의 s 조각은 인덱스 x = i + n * k가 0 <= n <(ji) / k 인 항목 시퀀스로 정의됩니다. 즉, 인덱스는 i, i + k, i + 2 * k, i + 3 * k 등이며 j에 도달하면 중지됩니다 (j는 포함되지 않음). k가 양수이면 i와 j가 더 크면 len (s)으로 축소됩니다.

당신이 쓰는 경우 s[999:9999], 파이썬은 반환 s[len(s):len(s)]이후 len(s) < 999와 단계는 긍정적 ( 1- 기본값).


슬라이싱은 기본 제공 유형에 의해 경계가 확인되지 않습니다. 두 예제 모두 동일한 결과를 나타내는 것처럼 보이지만 작동 방식이 다릅니다. 대신 목록으로 시도하십시오.

참고 URL : https://stackoverflow.com/questions/9490058/why-does-substring-slicing-with-index-out-of-range-work

반응형