Về cơ bản, bạn đã trả lời câu hỏi của riêng mình. Cắt bên ngoài các giới hạn của một chuỗi (ít nhất là để xây dựng) không gây ra lỗi. Nó có ý nghĩa khi bạn nghĩ về nó. Việc lập chỉ mục trả về một mục duy nhất, nhưng việc cắt trả về một chuỗi các mục. Vì vậy, khi bạn cố gắng lập chỉ mục một giá trị không tồn tại, không có gì để trả lại; nhưng khi bạn cắt một chuỗi bên ngoài giới hạn, bạn vẫn có thể trả về một chuỗi rỗng.
Cũng lưu ý rằng có là sự khác biệt chung giữa x[3]
và x[3:4]
. Ví dụ:
>>> [0, 1, 2, 3, 4, 5][3]
3
>>> [0, 1, 2, 3, 4, 5][3:4]
[3]
Lý do chúng giống nhau trong trường hợp chuỗi không có ký tự riêng lẻ bên ngoài chuỗi; một ký tự đơn chỉ là chuỗi gồm 1 ký tự.
'[999: 9999]' không phải là chỉ mục, đó là một lát và có ngữ nghĩa khác nhau. Từ phần giới thiệu python: "Chỉ số slice thoái hóa được xử lý một cách duyên dáng: chỉ mục quá lớn được thay thế bằng kích thước chuỗi, một giới hạn trên nhỏ hơn giới hạn dưới trả về một chuỗi rỗng". – geoffspear
@Wooble đó là câu trả lời thực tế – jondavidjohn
@Wooble Và bạn có biết tại sao nó theo cách này? Cảm ơn sự trình bày rõ ràng của bạn. – ijverig