Trong lập trình Python, thao tác với chuỗi là một phần không thể thiếu. Một trong những kỹ thuật cơ bản và thường xuyên được sử dụng là cắt chuỗi. Kỹ thuật này cho phép bạn trích xuất các phần nhỏ hơn từ một chuỗi lớn, dựa trên các chỉ số (index) xác định. Vậy, cắt chuỗi trong Python là gì và ứng dụng như thế nào? Hãy cùng tìm hiểu chi tiết hơn trong bài viết này về cắt chuỗi trong Python.
Các điểm chính
Khi đọc xong bài viết, bạn sẽ:
- Nắm vững khái niệm cắt chuỗi (string slicing) trong Python: Hiểu rõ bản chất của việc cắt chuỗi và lý do tại sao nó lại hữu ích trong lập trình.
- Làm quen với String Indexing: Biết cách truy cập vào các ký tự riêng lẻ trong chuỗi bằng chỉ số (index).
- Hiểu rõ cách sử dụng chỉ số dương và chỉ số âm: Phân biệt và áp dụng linh hoạt chỉ số dương (tính từ đầu chuỗi) và chỉ số âm (tính từ cuối chuỗi).
- Thành thạo các cú pháp cắt chuỗi khác nhau: Sử dụng thành thạo các cách cắt chuỗi với các tham số chỉ số bắt đầu, chỉ số kết thúc, và trường hợp không sử dụng tham số nào.
- Biết cách xử lý các trường hợp đặc biệt khi cắt chuỗi: Hiểu được kết quả trả về khi chỉ số bắt đầu lớn hơn chỉ số kết thúc, hoặc khi sử dụng các chỉ số âm.
Cắt chuỗi trong Python là gì?
Cắt chuỗi (slicing) trong Python là cách tạo ra một chuỗi con từ một chuỗi cho trước. Trong quá trình này, chúng ta trích xuất một phần hoặc một đoạn của chuỗi. Thông thường, chúng ta sử dụng toán tử cắt [:]
để thực hiện việc cắt chuỗi trong Python.

Trong Python, một chuỗi là một chuỗi ký tự Unicode có thứ tự. Mỗi ký tự trong chuỗi có một chỉ số duy nhất trong chuỗi đó. Chỉ số bắt đầu bằng 0
. Ký tự đầu tiên trong chuỗi có chỉ số vị trí là 0
. Chỉ số tiếp tục tăng dần về phía cuối chuỗi.
Nếu một biến chuỗi được khai báo như sau ten_bien
= "HOC PYTHON"
, thì chỉ số của từng ký tự trong chuỗi được minh họa trong bảng dưới:

String Indexing trong Python
Python cho phép bạn truy cập từng ký tự riêng lẻ trong chuỗi thông qua chỉ mục (index) của ký tự đó. Với chuỗi, chỉ mục bắt đầu từ 0 cho ký tự đầu tiên và tăng dần lên. Nếu vượt quá giới hạn, Python sẽ báo lỗi IndexError. Ví dụ:
ten = "Đạt Nguyễn"
print(ten[0]) # In ra ký tự đầu tiên
print(ten[4]) # In ra ký tự thứ 5
print(ten[9]) # In ra ký tự cuối
print(ten[10]) # Vượt quá giới hạn
Khi thực thi đoạn code này, màn hình sẽ hiển thị:
Đ
N
n
ERROR!
Traceback (most recent call last):
File “
IndexError: string index out of range
Chỉ số âm và dương trong chuỗi Python
Một trong những đặc điểm độc đáo của các kiểu dữ liệu dạng chuỗi (sequence types) trong Python (và do đó đối với đối tượng string) là kiểu dữ liệu chuỗi có một hệ thống đánh chỉ số âm. Trong các ví dụ trước, ta đã làm quen với cách đánh chỉ số dương, trong đó chỉ số tăng dần từ trái sang phải. Còn với chỉ số âm, ký tự ở cuối chuỗi sẽ có chỉ số là -1
, và chỉ số giảm dần từ phải sang trái, hệ quả là ký tự đầu tiên H
sẽ có chỉ số -12
.

Ví dụ:
chuoi = "CHAO PYTHON"
print(chuoi[-1]) # Lấy ký tự cuối cùng
print(chuoi[-5]) # Lấy ký tự thứ 5 từ phải sang
print(chuoi[-12]) # Lấy ký tự đầu tiên
Khi thực thi đoạn code trên, kết quả sẽ là:
N
Y
C
Trong Python, chuỗi là một đối tượng immutable (bất biến). Một đối tượng được gọi là bất biến nếu đối tượng đó không thể bị sửa đổi tại chỗ (in-place) sau khi đã được lưu trữ tại một vị trí bộ nhớ nhất định. Bạn có thể truy cập bất kỳ ký tự nào từ chuỗi bằng cách sử dụng chỉ số của ký tự đó, nhưng bạn không thể thay thế ký tự đó bằng một ký tự khác. Ví dụ:
chuoi = "CHÀO BUỔI SÁNG"
chuoi[5] = "c" # Thử thay đổi ký tự ở vị trí số 5 (chữ ' ' ở giữa 'CHÀO' và 'BUỔI')
print(chuoi)
Khi chạy code ta nhận được:
Traceback (most recent call last):
File “
chuoi[5] = “c”
~~~~~^^^
TypeError: ‘str’ object does not support item assignment
Giải thích:
chuoi = "CHÀO BUỔI SÁNG"
: Khai báo một biếnchuoi
và gán cho biến đó một chuỗi.chuoi[5] = "c"
: Dòng code này cố gắng thay đổi ký tự tại vị trí số 5 (tính từ 0) trong chuỗi thành chữ “c”.- Thông báo lỗi
TypeError: 'str' object does not support item assignment
(Kiểu'str'
không hỗ trợ gán phần tử): Lỗi này xuất hiện bởi vì chuỗi trong Python là immutable. Bạn không thể thay đổi một phần của chuỗi sau khi chuỗi đó đã được tạo.
Cách cắt chuỗi trong Python
Python sử dụng ký hiệu :
làm toán tử cắt chuỗi (string slicing). Toán tử này trả về một chuỗi con (substring) từ chuỗi ban đầu. Cách sử dụng tổng quát như sau:
chuoi_con = bien[x:y]
Toán tử :
cần hai toán hạng kiểu số nguyên (cả hai đều có thể bỏ qua, như chúng ta sẽ thấy trong các ví dụ sau). Toán hạng thứ nhất x
là chỉ số của ký tự bắt đầu của phần chuỗi con mong muốn. Toán hạng thứ hai y là chỉ số của ký tự ngay sau ký tự cuối cùng trong chuỗi con mong muốn. Vì vậy, bien[x:y]
sẽ tách các ký tự từ vị trí thứ x
đến vị trí thứ (y-1)
của chuỗi ban đầu. Ví dụ
ten_mon_hoc = "Lập Trình Python"
print ("Tên môn học đầy đủ:", ten_mon_hoc)
print ("Tên ngôn ngữ lập trình:", ten_mon_hoc[9:15])
Kết quả của đoạn code trên:
Tên môn học đầy đủ: Lập Trình Python
Tên ngôn ngữ lập trình: Python
Cắt chuỗi với chỉ số âm trong Python
Tương tự như chỉ số dương, chỉ số âm cũng có thể được sử dụng để cắt chuỗi (lấy ra một phần của chuỗi). Ví dụ dưới đây cho thấy cách cắt một chuỗi sử dụng các chỉ số âm:
chuoi = "XIN CHAO CAC BAN"
print("chuoi:", chuoi)
print("chuoi[3:8]:", chuoi[3:8])
print("chuoi[-9:-4]:", chuoi[-9:-4])
Kết quả đầu ra:
chuoi: XIN CHAO CAC
BAN
chuoi[3:8]: CHAO
chuoi[-9:-4]: CHAO
Giá trị mặc định của chỉ số trong cắt chuỗi
Trong Python, khi sử dụng toán tử cắt chuỗi (Slice operator – ký hiệu [:]
), cả hai toán hạng (chỉ số bắt đầu và chỉ số kết thúc) đều không bắt buộc phải có.
Chỉ số bắt đầu (bên trái)
Nếu không được cung cấp, chỉ số bắt đầu sẽ mặc định là 0
. Điều này có nghĩa là, nếu chúng ta bỏ qua toán hạng này, phần chuỗi được cắt sẽ bắt đầu từ ký tự có chỉ số 0
, tức là ký tự đầu tiên. Chuỗi con sẽ kéo dài đến vị trí “y-1
” (y
là chỉ số kết thúc). Ví dụ:
ten_sach = "Lập Trình Python Căn Bản"
print("ten_sach:", ten_sach)
print("ten_sach[0:8]:", ten_sach[0:8]) # Cắt từ chỉ số 0 đến 7
print("ten_sach[:8]:", ten_sach[:8]) # Không ghi chỉ số đầu, mặc định là 0
Kết quả:
ten_sach: Lập Trình Python Căn Bản
ten_sach[0:8]: Lập Trình
ten_sach[:8]: Lập Trình
Chỉ số kết thúc (bên phải)
Tương tự, toán hạng y
(chỉ số kết thúc) cũng có thể không cần chỉ định. Mặc định, chỉ số kết thúc là -1
, điều này có nghĩa là chuỗi sẽ được cắt từ vị trí x
(chỉ số bắt đầu) cho đến hết chuỗi. Ví dụ:
ten_sach = "Lập Trình Python Căn Bản"
print("ten_sach:", ten_sach)
print("ten_sach[9:22]:", ten_sach[9:22]) #Cắt từ chỉ số 9 đến hết
print("ten_sach[9:]:", ten_sach[9:]) #Không chỉ định chỉ số kết thúc
Kết quả:
ten_sach: Lập Trình Python Căn Bản
ten_sach[9:22]: Python Căn Bản
ten_sach[9:]: Python Căn Bản
Trường hợp không dùng cả hai toán hạng
Nếu cả hai toán hạng đều không được sử dụng, kết quả cắt chuỗi sẽ là toàn bộ chuỗi gốc. Điều đó là bởi vì, theo mặc định, “x
” là 0
và “y
” là chỉ số cuối cùng + 1
(hoặc -1
). Ví dụ:
ten_sach = "Lập Trình Python Căn Bản"
print("ten_sach:", ten_sach)
print("ten_sach[0:22]:", ten_sach[0:22])
print("ten_sach[:]:", ten_sach[:])
Kết quả:
ten_sach: Lập Trình Python Căn Bản
ten_sach[0:22]: Lập Trình Python Căn Bản
ten_sach[:]: Lập Trình Python Căn Bản
Trường hợp chỉ số bắt đầu lớn hơn chỉ số kết thúc
Toán hạng bên trái (chỉ số bắt đầu) phải nhỏ hơn toán hạng bên phải (chỉ số kết thúc) để có được một chuỗi con hợp lệ. Nếu chỉ số bắt đầu lớn hơn, Python sẽ không báo lỗi, mà sẽ trả về một chuỗi rỗng. Ví dụ:
ten_sach = "Lập Trình Python Căn Bản"
print("ten_sach:", ten_sach)
print("ten_sach[22:9]:", ten_sach[22:9]) # Chỉ số bắt đầu > kết thúc
print ("var[-1:7]:", var[-1:7]) #Kết quả sẽ ra chuỗi rỗng
Kết quả:
ten_sach: Lập Trình Python Căn Bản
ten_sach[22:9]:
Kiểu dữ liệu trả về khi thao tác cắt chuỗi trong Python
Thao tác cắt chuỗi (slicing) trả về một chuỗi mới. Bạn hoàn toàn có thể thực hiện các phép toán trên chuỗi như nối chuỗi hoặc tiếp tục cắt chuỗi trên kết quả vừa thu được. Ví dụ:
chuoi_ban_dau = "CHÀO BẠN ĐẾN VỚI PYTHON"
print("Chuỗi ban đầu:", chuoi_ban_dau)
print("Kết quả cắt kép:", chuoi_ban_dau[:10][:5])
chuoi_da_cat = chuoi_ban_dau[:10] # Cắt từ đầu đến ký tự thứ 9
print("Chuỗi sau khi cắt:", chuoi_da_cat)
print("Cắt chuỗi đã cắt:", chuoi_da_cat[:5]) # Cắt từ đầu đến ký tự thứ 4 của chuỗi đã cắt
Kết quả khi chạy code:
Chuỗi ban đầu: CHÀO BẠN ĐẾN VỚI PYTHON
Kết quả cắt kép: CHÀO
Chuỗi sau khi cắt: CHÀO BẠN Đ
Cắt chuỗi đã cắt: CHÀO
Lời kết
Như vậy, chúng ta đã cùng nhau tìm hiểu chi tiết về cắt chuỗi trong Python, từ khái niệm, cách sử dụng chỉ số âm và dương, cho đến các trường hợp đặc biệt. Hy vọng rằng những kiến thức này sẽ giúp bạn thao tác với chuỗi một cách linh hoạt và hiệu quả hơn trong các dự án lập trình Python của mình.
Mọi người cũng đọc