Trong Python, chuỗi có một đặc điểm quan trọng là immutable (bất biến). Điều này có nghĩa là bạn không thể trực tiếp thay đổi nội dung của một chuỗi sau khi nó đã được tạo. Vậy, làm thế nào để thực hiện các thao tác chỉnh sửa, cập nhật nội dung của chuỗi khi cần thiết? Bài viết này sẽ chỉ cho bạn các phương pháp khác nhau cho phép thay đổi chuỗi trong Python.
Các điểm chính
Khi đọc xong bài viết, bạn sẽ:
- Hiểu rõ tại sao chuỗi trong Python lại có tính chất đặc biệt này.
- Nắm vững các kỹ thuật để “thay đổi” chuỗi một cách linh hoạt, bao gồm cả việc chuyển đổi chuỗi thành danh sách.
- Làm quen với module array và StringIO Class – những công cụ hữu ích khi làm việc với chuỗi trong Python.
- Có thêm tự tin để giải quyết các bài toán liên quan đến chuỗi trong quá trình học lập trình Python.
Thay đổi chuỗi trong Python
Thay đổi chuỗi trong Python là quá trình tác động để thay đổi các ký tự của một chuỗi. Tuy nhiên, khi nói về việc “thay đổi” chuỗi trong Python, thực chất chúng ta đang tạo ra một chuỗi mới dựa trên chuỗi ban đầu.

Trong Python, chuỗi (một đối tượng của lớp str) là kiểu dữ liệu không thể thay đổi (immutable). “Không thể thay đổi” có nghĩa là một đối tượng, một khi đã được tạo ra trong bộ nhớ, thì không thể bị sửa đổi trực tiếp tại vị trí đó. Khác với danh sách (list), ta không thể ghi đè bất kỳ ký tự nào trong chuỗi, cũng không thể chèn hay thêm ký tự vào chuỗi đó một cách trực tiếp. Nếu cần chỉnh sửa chuỗi, chúng ta phải sử dụng các phương thức chuỗi, và các phương thức này sẽ trả về một đối tượng chuỗi mới. Chuỗi gốc sẽ vẫn giữ nguyên.
Tuy nhiên, có một số mẹo/thủ thuật để ta có thể đạt được kết quả tương tự như việc thay đổi một chuỗi.
Chuyển đổi chuỗi thành danh sách
Trong Python, cả chuỗi và danh sách đều là kiểu dữ liệu dạng chuỗi, chúng có thể chuyển đổi qua lại lẫn nhau. Do đó, ta có thể chuyển một chuỗi thành danh sách, chỉnh sửa danh sách bằng các phương thức như insert()
(chèn), append()
(thêm vào cuối), hoặc remove()
(xóa), và sau đó chuyển danh sách trở lại thành chuỗi để có được một phiên bản đã chỉnh sửa.
Giả sử, ta có một biến chuỗi chuoi_ban_dau
với giá trị là “CHAO
” và ta cần chuyển đổi chuỗi này thành một danh sách. Để làm điều này, chúng ta có thể dùng hàm có sẵn list()
. Sau đó ta sẽ thêm kí tự “M
” vào sau “O
” ở vị trí 2, tiếp theo, ta có thể nối tất cả các ký tự bằng phương thức join()
của lớp str.
Ví dụ:
chuoi_ban_dau = "CHAO"
print("Chuỗi ban đầu:", chuoi_ban_dau)
# Chuyển chuỗi thành danh sách
danh_sach_ky_tu = list(chuoi_ban_dau)
# Chèn ký tự "M" vào vị trí thứ 3 (sau "O")
danh_sach_ky_tu.insert(2,"M")
print(danh_sach_ky_tu)
# Nối các ký tự trong danh sách lại thành chuỗi
chuoi_moi = ''.join(danh_sach_ky_tu)
print("Chuỗi sau khi sửa:", chuoi_moi)
Khi thực thi đoạn code trên, kết quả sẽ là:
Chuỗi ban đầu: CHAO
[‘C’, ‘H’, ‘A’, ‘M’, ‘O’]
Chuỗi sau khi sửa: CHAM
Sử dụng module array để thay đổi chuỗi trong Python
Để chỉnh sửa một chuỗi, chúng ta có thể tạo một đối tượng mảng bằng cách sử dụng module array có sẵn trong thư viện chuẩn của Python. Module này sẽ tạo một mảng kiểu Unicode từ một biến chuỗi. Ví dụ:
import array as arr
# Khởi tạo một chuỗi
chuoi_ban_dau = "HOC"
print("Chuỗi ban đầu:", chuoi_ban_dau)
# Chuyển đổi chuỗi thành mảng
mang_ky_tu = arr.array('u', chuoi_ban_dau)
# Chèn một ký tự vào mảng
mang_ky_tu.insert(1, "A")
# Chuyển mảng trở lại thành chuỗi
chuoi_moi = mang_ky_tu.tounicode()
print("Chuỗi sau khi chỉnh sửa:", chuoi_moi)
Kết quả khi chạy đoạn mã trên:
Chuỗi ban đầu: HOC
Chuỗi sau khi chỉnh sửa: HAOC
Sử dụng StringIO Class để thay đổi chuỗi trong Python
Module io trong Python định nghĩa các lớp (class) để xử lý các luồng (stream) dữ liệu. Lớp StringIO biểu diễn một luồng văn bản sử dụng bộ đệm văn bản trong bộ nhớ. Một đối tượng StringIO được tạo ra từ một chuỗi sẽ hoạt động giống như một đối tượng File. Do đó, chúng ta có thể thực hiện các thao tác đọc/ghi trên đối tượng StringIO. Phương thức getvalue()
của lớp StringIO trả về một chuỗi.
Ví dụ:
import io
chuoi_ban_dau = "HOC"
print("Chuỗi ban đầu:", chuoi_ban_dau)
# Tạo một đối tượng StringIO từ chuỗi ban đầu.
luong_chuoi = io.StringIO(chuoi_ban_dau)
# Di chuyển con trỏ đến vị trí thứ 3 (bắt đầu từ 0).
luong_chuoi.seek(2)
# Ghi đè "C" bằng "T".
luong_chuoi.write("T")
# Lấy chuỗi đã được sửa đổi.
chuoi_da_sua = luong_chuoi.getvalue()
print("Chuỗi đã sửa:", chuoi_da_sua)
Chương trình trên sẽ cho ra kết quả:
Chuỗi ban đầu: HOC
Chuỗi đã sửa: HOT
Lời kết
Vậy là chúng ta đã cùng nhau tìm hiểu chi tiết về các phương pháp khác nhau để thay đổi chuỗi trong Python, từ những kỹ thuật cơ bản như chuyển đổi thành danh sách đến việc sử dụng các module array và lớp StringIO. Hy vọng những kiến thức này sẽ hữu ích cho bạn trong quá trình lập trình và giúp bạn linh hoạt xử lý các bài toán liên quan đến chuỗi. Chúc bạn thành công!
Mọi người cũng đọc