Python String slicing là một cách để tạo ra một chuỗi con từ một chuỗi đã cho. 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 một 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 trên một chuỗi Python. Trước khi tiếp tục với việc cắt chuỗi, hãy cùng tìm hiểu về chỉ số chuỗi.
Trong Python, một string là một chuỗi có thứ tự của Unicode characters . Mỗi ký tự trong chuỗi có một chỉ số duy nhất trong chuỗi. Chỉ số bắt đầu từ 0. Ký tự đầu tiên trong chuỗi có chỉ số vị trí là 0. Chỉ số tiếp tục tăng lên đến cuối chuỗi.
Nếu một biến chuỗi được khai báo là var="HELLO PYTHON", chỉ số của mỗi ký tự trong chuỗi như sau −
Python cho phép bạn truy cập bất kỳ ký tự riêng lẻ nào từ chuỗi thông qua chỉ số của nó. Trong trường hợp này, 0 là giới hạn dưới và 11 là giới hạn trên của chuỗi. Vì vậy, var[0] trả về H, var[6] trả về P. Nếu chỉ số trong dấu ngoặc vuông vượt quá giới hạn trên, Python sẽ phát sinh lỗi IndexError.
Trong ví dụ dưới đây, chúng ta truy cập các ký tự của một chuỗi thông qua chỉ số.
var = "HELLO PYTHON" print(var[0]) print(var[7]) print(var[11]) print(var[12])
Khi chạy đoạn mã, nó sẽ tạo ra đầu ra sau đây −
H Y N ERROR! Traceback (most recent call last): File "<main.py>", line 5, in <module> IndexError: string index out of range
Một trong những đặc điểm độc đáo của các kiểu chuỗi trong Python (và do đó là đối tượng chuỗi) là nó cũng có một hệ thống chỉ mục âm. Trong ví dụ trên, một hệ thống chỉ mục dương được sử dụng, trong đó chỉ mục tăng dần từ trái sang phải. Trong trường hợp chỉ mục âm, ký tự ở cuối có chỉ số -1 và chỉ số giảm dần từ phải sang trái, do đó ký tự đầu tiên H có chỉ số -12.
Hãy sử dụng chỉ mục âm để lấy các ký tự N, Y và H.
var = "HELLO PYTHON" print(var[-1]) print(var[-5]) print(var[-12])
Khi thực thi đoạn mã trên, nó sẽ cho ra kết quả sau −
N Y H
Do đó, chúng ta có thể sử dụng chỉ số dương hoặc âm để lấy một ký tự từ chuỗi.
Trong Python, chuỗi là một đối tượng không thay đổi. Đối tượng được coi là không thay đổi nếu nó không thể bị sửa đổi tại chỗ, một khi đã được lưu trữ ở một vị trí bộ nhớ nhất định. Bạn có thể truy xuất bất kỳ ký tự nào từ chuỗi bằng cách sử dụng chỉ số của nó, nhưng bạn không thể thay thế nó bằng một ký tự khác.
Trong ví dụ sau, ký tự Y nằm ở chỉ số 7 trong HELLO PYTHON. Hãy thử thay thế Y bằng y và xem điều gì xảy ra.
var="HELLO PYTHON" var[7]="y" print (var)
Nó sẽ tạo ra output −
Traceback (most recent call last): File "C:\Users\users\example.py", line 2, in <module> var[7]="y" ~~~^^^ TypeError: 'str' object does not support item assignment
TypeError xảy ra vì chuỗi là bất biến.
Python định nghĩa ":" là toán tử cắt chuỗi. Nó trả về một chuỗi con từ chuỗi gốc. Cách sử dụng chung của nó như sau −
substr=var[x:y]
Toán tử ":" cần hai toán hạng nguyên (cả hai có thể bị bỏ qua, như chúng ta sẽ thấy trong các ví dụ tiếp theo). Toán hạng đầu tiên x là chỉ số của ký tự đầu tiên trong đoạn cắt 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 mong muốn. Vì vậy, var(x:y] tách các ký tự từ vị trí x đến vị trí (y-1) từ chuỗi gốc.
var="HELLO PYTHON" print ("var:",var) print ("var[3:8]:", var[3:8])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[3:8]: LO PY
Giống như chỉ số dương, chỉ số âm cũng có thể được sử dụng để cắt chuỗi.
Ví dụ dưới đây cho thấy cách cắt một chuỗi bằng cách sử dụng chỉ số âm.
var="HELLO PYTHON" print ("var:",var) print ("var[3:8]:", var[3:8]) print ("var[-9:-4]:", var[-9:-4])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[3:8]: LO PY var[-9:-4]: LO PY
Cả hai toán hạng cho toán tử Slice trong Python đều là tùy chọn. Toán hạng đầu tiên mặc định là 0, có nghĩa là nếu chúng ta không cung cấp toán hạng đầu tiên, đoạn cắt sẽ bắt đầu từ ký tự tại chỉ số 0, tức là ký tự đầu tiên. Nó cắt chuỗi con bên trái nhất lên đến "y-1" ký tự.
Trong ví dụ này, chúng ta đang thực hiện thao tác cắt (slice) bằng cách sử dụng các giá trị mặc định.
var="HELLO PYTHON" print ("var:",var) print ("var[0:5]:", var[0:5]) print ("var[:5]:", var[:5])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[0:5]: HELLO var[:5]: HELLO
Tương tự, toán hạng y cũng là tùy chọn. Mặc định, nó là "-1", có nghĩa là chuỗi sẽ được cắt từ vị trí x đến hết chuỗi.
var="HELLO PYTHON" print ("var:",var) print ("var[6:12]:", var[6:12]) print ("var[6:]:", var[6:])
Nó sẽ tạo ra đầu ra sau đây −
var: HELLO PYTHON var[6:12]: PYTHON var[6:]: PYTHON
Một cách tự nhiên, nếu cả hai toán hạng không được sử dụng, đoạn cắt sẽ bằng với chuỗi gốc. Điều này là vì "x" là 0, và "y" là chỉ số cuối cùng + 1 (hoặc -1) theo mặc định.
var="HELLO PYTHON" print ("var:",var) print ("var[0:12]:", var[0:12]) print ("var[:]:", var[:])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[0:12]: HELLO PYTHON var[:]: HELLO PYTHON
Toán hạng bên trái phải nhỏ hơn toán hạng bên phải để lấy một chuỗi con từ chuỗi gốc. Python không báo lỗi nếu toán hạng bên trái lớn hơn, nhưng sẽ trả về một chuỗi rỗng.
var="HELLO PYTHON" print ("var:",var) print ("var[-1:7]:", var[-1:7]) print ("var[7:0]:", var[7:0])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[-1:7]: var[7:0]:
Slicing trả về một chuỗi mới. Bạn hoàn toàn có thể thực hiện các thao tác trên chuỗi như nối chuỗi (concatenation) hoặc cắt chuỗi (slicing) trên chuỗi đã được cắt.
var="HELLO PYTHON" print ("var:",var) print ("var[:6][:2]:", var[:6][:2]) var1=var[:6] print ("slice:", var1) print ("var1[:2]:", var1[:2])
Nó sẽ tạo ra output −
var: HELLO PYTHON var[:6][:2]: HE slice: HELLO var1[:2]: HE