W zasadzie odpowiedziałeś na własne pytanie. Krojenie poza granicami sekwencji (przynajmniej dla wbudowanych) nie powoduje błędu. Ma to sens, gdy się nad tym zastanowić. Indeksowanie zwraca pojedynczy element, ale wycinanie zwraca podsekwencję elementów. Więc kiedy próbujesz zindeksować nieistniejącą wartość, nie ma nic do zwrócenia; ale gdy wycinasz sekwencję poza granicami, wciąż możesz zwrócić pustą sekwencję.
Należy również zauważyć, że to różnica między wartościami x[3]
i x[3:4]
. Na przykład:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
Powodem wyglądają tak samo w przypadku strun jest to, że nie ma czegoś takiego jak indywidualny charakter poza ciągiem; pojedyncza postać jest po prostu ciągiem 1-znakowym.
'[999: 9999]' nie jest indeksem, jest krojem i ma inną semantykę. Od wstępu do Pythona: "Indeksy Degenerate slice są obsługiwane z wdziękiem: indeks, który jest zbyt duży, jest zastępowany przez rozmiar ciągu, górna granica mniejsza niż dolna granica zwraca pusty ciąg." – geoffspear
@Woble, to jest aktualna odpowiedź – jondavidjohn
@Wooble I czy wiesz, dlaczego tak jest? Dziękuję Ci za wyjaśnienie. – ijverig