Bài viết này là một phần rút ra trong cuốn sách Python mà tôi đang đọc. Vì đặc thù là ứng dụng Python vào việc mã hóa – chủ đề chính của cuốn sách – nên việc xử lý chuỗi được đầu tư nói rất kĩ.

Indexing

Để thể hiện index, ta dùng cặp dấu ngoặc vuông [ và ] kèm số index mong muốn ở giữa nó và cuối chuỗi cần xử lý.

Cũng như ngôn ngữ C, số index của một chuỗi trong Python cũng bắt đầu từ số 0.

Lấy một ví dụ cụ thể. Lưu ý ta thao tác bài này trên Python 3.

>>> vidu = ‘Hello’

>>> vidu[0]

‘H’

>>> vidu[1]

‘e’

>>> vidu[2]

‘l’

Ví dụ ở trên ta gán chuỗi cần lấy index vào một biến. Biến lưu trữ đó tên là vidu.

Ta hoàn toàn có thể lấy index trực tiếp trên chuỗi trong Python mà không cần phải gán cho một biến cụ thể nào.

>> ‘Thuong'[2]

‘u’

Nếu trong trường hợp ta gõ số index vượt quá không gian index của chuỗi đang thao tác, thì Python mặc định sẽ trả về lỗi thông báo:

>>> ‘Hello'[10]
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
IndexError: string index out of range
>>>

Negative Indexes

Hiểu đơn giản thì negative indexes sẽ lấy index ngược từ cuối chuỗi trở về đầu. Cách làm hoàn toàn đối lập với Indexing ở trên.

Số negative indexes khởi đầu luôn là [-1].

>>> ‘Hello'[-1]
‘o’
>>> ‘Hello'[-2]
‘l’
>>> ‘Hello'[-3]
‘l’
>>> ‘Hello'[-4]
‘e’
>>> ‘Hello'[-5]
‘H’
>>> ‘Hello'[0]
‘H’
>>>

Một điểm thú vị ở đây là nếu gõ ‘Hello'[-5] hay ‘Hello'[0] đều trả về cùng một giá trị là ký tự ‘H’.

Slicing

Hiểu đơn giản thì Slicing là kiểu cắt khoản chuỗi theo một độ dài quy định.

>>> ‘Howdy'[0:3]
‘How’
>>>

Như ví dụ trên, index 0 tức là vị trí đầu tiên lấy ra ký tự, 3 là index sẽ dừng lại. Ta có được trong ví dụ là ‘How’.

>>> ‘Hello world!'[-6:-1]
‘world’

Còn với ví dụ này thì ngược lại một chút. Index -1 tức là ở vị trí đó xuất phát, và không lấy kí tự ở index đó, sau đó tính tiếp tới index -6 (sẽ lấy kí tự ở index -6).

Như trong ví dụ, index -1 là kí tự ‘!’, đếm tiếp cho tới -6 thì là trọn vẹn chữ ‘world’. Index -6 là chữ ‘w’ và lấy luôn giá trị này không bỏ.

Có một cách phức tạp hơn để lấy ra một chữ.

Ví dụ để lấy ra ký tự ‘r’ trong chuỗi ‘Hello world’ ta có thể làm như cách sau:

>>> ‘Hello world'[8]

‘r’

Nhưng đôi khi cũng có cách làm rối hơn, người khác có thể gọi là đó là cách làm thông minh logic này nọ.

>>> ‘Hello world'[6:12][2]

‘r’

Index từ 6 tới 12 là để lấy ra chữ ‘world’. Còn index 2 ở cuối là để lấy ra ký tự ‘r’ trong chữ ‘world’ vừa có được ở kết quả trên.

Một điểm thú vị của Slicing index là dù bạn có đưa giá trị lớn vượt ngưỡng, nó vẫn không báo lỗi.

>>> ‘Hello'[0:999]
‘Hello’
>>> ‘Hello'[2:999]
‘llo’
>>> ‘Hello'[1000:2000]

>>>

Index từ 0 tới 999 thì nó sẽ thấy index đầu là 0, lấy từ chữ ở index 0. Điều này không có gì bàn cãi. Nhưng index 999 thì out of range rồi, nên nó sẽ thực hiện cách nhanh nhất là lấy toàn bộ ký tự trong chuỗi kể từ index start quy định (index 0).

Index 2 tới 999 cũng tương tự như trên.

Index 1000 tới 2000 thì do start index đã out of range ngay từ đầu, nên kết quả trả về lập tức là hai dấu nháy đơn thuần.

Blank Slice Indexes

Đây thực ra chỉ là một kiểu ngầm định index.

>>> ‘Howdy'[:3]
‘How’
>>> ‘Howdy'[0:3]
‘How’
>>>

Về cơ bản thì 2 cách trên là tương tự nhau.

>>> ‘Howdy'[2:]
‘wdy’

>>>

Cách này cũng có thể áp dụng cho cả kiểu slicing.

>>> myName = ‘Zophie the Fat Cat’
>>> myName[-7:]
‘Fat Cat’
>>> myName[:10]
‘Zophie the’
>>> myName[7:]
‘the Fat Cat’
>>>

VÕ TÌNH THƯƠNG

votinhthuong9@gmail.com