Indexing (đánh chỉ mục)
Mỗi kí tự trong một chuỗi kí tự có một chỉ mục (index), cái chỉ ra vị trí của nó. Kí
tự đầu tiên là tại index 0, kí tự thứ hai là tại index 1…vv..Trong ngôn ngữ tư nhiên,
chúng ta thường bắt đầu đếm tại 1. Trong tiếng Anh, không ai nói “the character at position
0 of hello is h”. Nhưng hầu hết ngôn ngữ lập trình, bao gồm Python bắt đầu tại 0.
Để sử dụng đánh chỉ mục, chúng ta đi theo một chuỗi kí tự theo chỉ mục trong dấu [ ]. Sau đây
là một vài ví dụ về đánh chỉ mục:
>>> word = ‘splore’
>>> word[0]
‘s’
>>> word[3]
‘o’
>>> word[5]
‘e’
Nếu chúng ta thích, chúng ta có thể sử dụng biến trong một index:
>>> where = 2
>>> word[where]
‘l’
>>> word[where + 2]
‘r’
Index cao nhất cái chúng ta có thể sử dụng trên một string không rỗng là độ dài của
nó cộng 1. (Không có chỉ mục có hiệu lực cho một string rỗng).Ví dụ, ‘splore’ có độ
dài 6, nên index 5 là index cao nhất của nó. Bất cứ cái nào lớn hơn và chúng ta nhận
lỗi:
>>> word[len(word)]
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
IndexError: string index out of range
>>> word[len(word) – 1]
‘e’
Làm cách nào chúng ta có thể truy cập kí tự thứ hai từ bên phải của một chuỗi kí tự? Cái
này sẽ làm nó:
>>> word[len(word) – 2]
‘r’
Nhưng có một cách dễ dàng hơn. Python hỗ trợ chỉ mục âm như tuỳ chọn khác nữa cho truy cập
các kí tự. Index -1 là kí tự cực phải, index -2 là kí tự thứ hai từ phải sang..vv..
>>> word[-2]
‘r’
>>> word[-1]
‘e’
>>> word[-5]
‘p’
>>> word[-6]
‘s’
>>> word[-7]
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
IndexError: string index out of range
Kế hoạch là sử dụng indexing để truy cập các vị trí tương ứng của thông tin đậu xe
ngày hôm qua và hôm nay. Chúng ta có thể sử dụng index 0 của mỗi chuỗi kí tự để truy
cập thông tin về chỗ đậu xe đầu tiên, index 1 để truy cập thông tin về chỗ đậu xe thứ
hai..vv..Nhưng trước khi chúng ta có thể tiến hành kế hoạch đó, chúng ta cần học
một loại loop mới.
Concept check
Đầu ra của đoạn mã sau là gì?
s = ‘abcde’
t = s[0] + s[-5] + s[len(s) – 5]
print(t)
A. aaa
B. aae
C. aee
D. Đoạn mã này tạo ra lỗi
Đáp án: A. Mỗi chỉ số trong ba chỉ số đều tham chiếu đến ký tự đầu tiên trong ‘abcde’. Đầu tiên,
s[0] tham chiếu đến ‘a’ vì ‘a’ là ở chỉ số 0 của chuỗi. Thứ hai, s[-5] tham chiếu đến
‘a’ vì ‘a’ là ký tự thứ năm từ phải sang. Thứ ba, s[len(s) – 5] tham chiếu đến
‘a’ vì chỉ số được tính là 0: 5 (độ dài của chuỗi) trừ đi 5.