Các chuỗi là một trong những kiểu dữ liệu phổ biến nhất trong Python. Chúng ta có thể tạo chúng bằng cách đơn giản là bao quanh các ký tự bằng dấu ngoặc kép hoặc đơn. Python xử lý dấu ngoặc kép và đơn như nhau. Việc tạo chuỗi rất đơn giản chỉ cần gán một giá trị cho một biến. Ví dụ:
var1 = 'Hello World!'
var2 = "Python Programming"
Truy cập giá trị trong chuỗi
Python không hỗ trợ kiểu ký tự đơn lẻ; chúng được xem như chuỗi có độ dài một, do đó cũng được coi là một chuỗi con.
Để truy cập chuỗi con, sử dụng các dấu ngoặc vuông để cắt lát cùng với chỉ mục hoặc chỉ mục để lấy chuỗi con của bạn. Ví dụ:
var1 = 'Hello World!'
var2 = "Python Programming"
print "var1[0]: ", var1[0]
print "var2[1:5]: ", var2[1:5]
Kết quả sau khi chạy đoạn chương trình trên sẽ là:
var1[0]: H
var2[1:5]: ytho
Cập nhật chuỗi
Bạn có thể “cập nhật” một chuỗi hiện có bằng cách gán lại một biến với một chuỗi khác. Giá trị mới có thể liên quan đến giá trị trước đó hoặc hoàn toàn khác. Ví dụ:
var1 = 'Hello World!'
print "Updated String :- ", var1[:6] + 'Python'
Kết quả sau khi chạy đoạn chương trình trên sẽ là:
Updated String :- Hello Python
Ký tự đặc biệt (Escape Characters)
Bảng sau đây là danh sách các ký tự đặc biệt hoặc không in được mà có thể được biểu diễn bằng cách sử dụng định dạng backslash.
Một ký tự đặc biệt được hiểu theo cách được định dạng; trong cả chuỗi được bao quanh bởi dấu nháy đơn hoặc dấu nháy kép.
Escape Character | Mô tả |
---|---|
\\ |
Dấu gạch chéo ngược (backslash) |
\' |
Dấu ngoặc đơn (single quote) |
\" |
Dấu ngoặc kép (double quote) |
\n |
Ký tự xuống dòng (new line) |
\t |
Ký tự tab (horizontal tab) |
\b |
Ký tự backspace (xóa ký tự trước đó) |
\r |
Ký tự return (trở về đầu dòng) |
\f |
Ký tự formfeed (tạo một trang mới) |
\ooo |
Ký tự ASCII với mã octal ooo (ví dụ: \141 tương đương với ký tự “a”) |
\xhh |
Ký tự ASCII với mã hexa hh (ví dụ: \x61 tương đương với ký tự “a”) |
\N{name} |
Ký tự Unicode với tên name (ví dụ: \N{GREEK CAPITAL LETTER DELTA} tương đương với ký tự “Δ”) |
Chú ý rằng khi sử dụng dấu ngoặc đơn hoặc kép trong một chuỗi, bạn có thể sử dụng Escape Character tương ứng để tránh gặp lỗi khi Python hiểu nhầm ký tự đó là ký tự kết thúc chuỗi.
Toán tử đặc biệt cho chuỗi
Sau đây là các toán tử được sử dụng để thao tác với chuỗi.
Toán tử | Ý nghĩa | Ví dụ |
---|---|---|
+ | Nối chuỗi | "Hello" + " world!" = "Hello world!" |
* | Lặp lại chuỗi | "abc" * 3 = "abcabcabc" |
[] | Lấy ký tự theo vị trí | "Python"[2] = "t" |
[ : ] | Lấy chuỗi con từ vị trí bắt đầu đến kết thúc | "Python"[1:4] = "yth" |
[ : : ] | Lấy chuỗi con với bước nhảy | "Python"[::2] = "Pto" |
in | Kiểm tra xem một chuỗi có chứa trong chuỗi khác | "py" in "Python" = True |
not in | Kiểm tra xem một chuỗi không chứa trong chuỗi khác | "xyz" not in "Python" = True |
% | Định dạng chuỗi | "%s is %d years old" % ("John", 20) = "John is 20 years old" |
r/R | Chuỗi nguyên bản (raw string) | r"Hello\nWorld" = "Hello\nWorld" |
format() | Định dạng chuỗi bằng phương thức format() | "{} is {} years old".format("John", 20) = "John is 20 years old" |
f-string | Định dạng chuỗi bằng f-string | f"{2+2} is the result" = "4 is the result" |
Toán tử Định dạng Chuỗi
Một trong những tính năng tuyệt vời nhất của Python là toán tử định dạng chuỗi % . Toán tử này chỉ tồn tại trong chuỗi và bù đắp cho việc thiếu các hàm từ họ printf() của C. Dưới đây là một ví dụ đơn giản.
print "My name is %s and weight is %d kg!" % ('Zara', 21)
Kết quả sau khi chạy lệnh trên sẽ là:
My name is Zara and weight is 21 kg!
Đây là bảng danh sách đầy đủ các ký hiệu có thể được sử dụng cùng với ký hiệu %, bao gồm ý nghĩa và ví dụ kèm theo:
Ký hiệu | Ý nghĩa | Ví dụ |
---|---|---|
%c | ký tự | print(‘%c’, ‘a’) => ‘a’ |
%s | chuỗi | print(‘%s’, ‘hello’) => ‘hello’ |
%i | số nguyên có dấu | print(‘%i’, 42) => ‘42’ |
%d | số nguyên có dấu | print(‘%d’, -42) => ‘-42’ |
%u | số nguyên không dấu | print(‘%u’, 42) => ‘42’ |
%o | số bát phân | print(‘%o’, 42) => ‘52’ |
%x | số thập lục phân, chữ thường | print(‘%x’, 3735928559) => ‘deadbeef’ |
%X | số thập lục phân, chữ hoa | print(‘%X’, 3735928559) => ‘DEADBEEF’ |
%e | dạng số mũ, chữ thường | print(‘%e’, 123.456) => ‘1.234560e+02’ |
%E | dạng số mũ, chữ hoa | print(‘%E’, 123.456) => ‘1.234560E+02’ |
%f | số thực | print(‘%f’, 3.141592653589793) => ‘3.141593’ |
%g | %f hoặc %e (tùy thuộc vào giá trị) | print(‘%g’, 123.456) => ‘123.456’ |
%G | %f hoặc %E (tùy thuộc vào giá trị) | print(‘%G’, 123.456) => ‘123.456’ |
Các biểu tượng và chức năng được hỗ trợ khác được liệt kê trong bảng sau:
Ký hiệu | Chức năng | Ví dụ |
---|---|---|
* | Xác định độ rộng hoặc độ chính xác | ‘{0:*^10}’.format(‘center’) => ‘center’ |
- | Căn lề trái | ’‘.format(‘left’) => ‘left ‘ |
+ | Hiển thị dấu (+ hoặc -) | ’‘.format(42) => ‘+42’ |
Để trống một khoảng trống trước số dương | ’‘.format(42) => ‘ 42’ | |
# | Thêm tiền tố ‘0’ cho số bát phân và ‘0x’ hoặc ‘0X’ cho số thập lục phân | ’‘.format(42) => ‘0o52’, ‘‘.format(3735928559) => ‘0xdeadbeef’ |
0 | Thêm số 0 vào bên trái cho đủ độ rộng | ’‘.format(42) => ‘00042’ |
% | Để in ra ký tự % | ‘5% discount’.format() => ‘5% discount’ |
(var) | Sử dụng biến từ dictionary truyền vào để thay thế giá trị định dạng | ‘{first} {last}’.format_map({‘first’: ‘Jane’, ‘last’: ‘Doe’}) => ‘Jane Doe’ |
m.n. | m là tổng độ rộng tối thiểu và n là số chữ số sau dấu thập phân (nếu có) | ’‘.format(3.141592653589793) => ‘ 3.142’ |
Dấu nháy 3 (Triple Quotes)
Dấu nháy 3 (Triple Quotes) của Python giúp cho việc tạo chuỗi với nhiều dòng, bao gồm cả các ký tự đặc biệt như NEWLINEs, TABs, và bất kỳ ký tự đặc biệt nào khác.
Cú pháp của dấu nháy 3 (Triple Quotes) bao gồm ba dấu nháy đơn hoặc ba dấu nháy kép liên tiếp.
Ví dụ minh họa
para_str = """this is a long string that is made up of
several lines and non-printable characters such as
TAB ( \t ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [ \n ], or just a NEWLINE within
the variable assignment will also show up.
"""
print para_str
Khi mã trên được thực thi, nó sẽ tạo ra kết quả như sau. Lưu ý là mỗi ký tự đặc biệt được chuyển đổi thành dạng in, bao gồm đến ký tự NEWLINE cuối cùng ở giữa các dấu nháy kép và dấu nháy đóng. Lưu ý rằng NEWLINE có thể xuất hiện với cả xuống dòng rõ ràng ở cuối dòng hoặc mã trốn (\n) −
this is a long string that is made up of
several lines and non-printable characters such as
TAB ( ) and they will show up that way when displayed.
NEWLINEs within the string, whether explicitly given like
this within the brackets [
], or just a NEWLINE within
the variable assignment will also show up.
Chuỗi nguyên bản (Raw strings) không xem dấu gạch chéo như một ký tự đặc biệt nữa. Mỗi ký tự bạn đặt vào chuỗi nguyên bản sẽ được giữ nguyên như cách bạn đã viết −
Ví dụ minh họa
print 'C:\nowhere'
Khi mã trên được thực thi, nó sẽ tạo ra kết quả như sau −
C:\nowhere
Bây giờ chúng ta sẽ sử dụng chuỗi nguyên bản. Chúng ta sẽ đặt biểu thức vào r’biểu thức’ như sau −
Ví dụ minh họa
print r'C:\nowhere'
Khi mã trên được thực thi, nó sẽ tạo ra kết quả như sau −
C:\nowhere
Chuỗi Unicode
Trong Python, chuỗi bình thường được lưu trữ nội bộ dưới dạng ASCII 8 bit, trong khi chuỗi Unicode được lưu trữ dưới dạng Unicode 16 bit. Điều này cho phép có một tập hợp ký tự đa dạng hơn, bao gồm các ký tự đặc biệt từ hầu hết các ngôn ngữ trên thế giới. Tôi sẽ giới hạn việc xử lý chuỗi Unicode trong Python như sau -
Mã minh họa
print u'Xin chào, thế giới!'
Khi mã trên được thực thi, nó sẽ tạo ra kết quả sau -
Xin chào, thế giới!
Như bạn có thể thấy, chuỗi Unicode sử dụng tiền tố u, giống như chuỗi thô sử dụng tiền tố r.
Các phương thức chuỗi tích hợp sẵn Python bao gồm các phương thức tích hợp sẵn sau để xử lý chuỗi, các phương thức này được sắp xếp theo độ phổ biến.
STT | Tên | Giải thích | Ví dụ (kèm kết quả) |
---|---|---|---|
1 | capitalize() | Viết hoa chữ cái đầu tiên của chuỗi. | “hello world”.capitalize() -> “Hello world” |
2 | center() | Can giữa chuỗi với độ rộng được chỉ định. | “hello”.center(10) -> “ hello “ |
3 | count() | Đếm số lần xuất hiện của một chuỗi con trong chuỗi. | “hello”.count(“l”) -> 2 |
4 | decode() | Giải mã chuỗi sử dụng mã hóa được đăng ký cho mã hóa. | “hello”.encode().decode() -> “hello” |
5 | encode() | Trả về phiên bản chuỗi đã được mã hóa. | “hello”.encode() -> b’hello’ |
6 | endswith() | Xác định nếu chuỗi kết thúc bằng một chuỗi con được chỉ định. | “hello”.endswith(“lo”) -> True |
7 | expandtabs() | Thay thế các ký tự tab bằng khoảng trắng. | “hello\tworld”.expandtabs() -> “hello world” |
8 | find() | Tìm kiếm một chuỗi con trong chuỗi và trả về chỉ mục của nó. | “hello”.find(“l”) -> 2 |
9 | index() | Tìm kiếm một chuỗi con trong chuỗi và trả về chỉ mục của nó. | “hello”.index(“l”) -> 2 |
10 | isalnum() | Trả về True nếu tất cả các ký tự trong chuỗi là chữ cái hoặc số. | “hello123”.isalnum() -> True |
11 | isalpha() | Trả về True nếu tất cả các ký tự trong chuỗi là chữ cái. | “hello”.isalpha() -> True |
12 | isdigit() | Trả về True nếu tất cả các ký tự trong chuỗi là số. | “123”.isdigit() -> True |
13 | islower() | Trả về True nếu tất cả các ký tự chữ của chuỗi đều viết thường. | “hello”.islower() -> True |
14 | isnumeric() | Trả về True nếu tất cả các ký tự trong chuỗi là ký tự số. | “123”.isnumeric() -> True |
15 | isspace() | Trả về True nếu tất cả các ký tự trong chuỗi là khoảng trắng. | ” “.isspace() -> True |
16 | istitle() | Kiểm tra xem chuỗi có đúng định dạng “titlecased” và trả về True hoặc False | “This Is A Title”.istitle() –> True |
17 | isupper() | Kiểm tra xem tất cả các ký tự trong chuỗi đều in hoa và trả về True hoặc False | “HELLO”.isupper() –> True |
18 | join(seq) | Nối các phần tử trong chuỗi với ký tự phân cách là chuỗi gốc | ”, “.join([“apple”, “banana”]) –> “apple, banana” |
19 | len(string) | Trả về độ dài của chuỗi | len(“hello”) –> 5 |
20 | ljust(width, fillchar) | Trả về một chuỗi với chuỗi gốc được căn trái với tổng số cột là width. Chuỗi được lấp đầy bằng khoảng trắng nếu fillchar không được cung cấp. | “Python”.ljust(10) -> “Python “ |
21 | lower() | Chuyển các ký tự in hoa trong chuỗi thành ký tự thường. | “Hello WORLD”.lower() -> “hello world” |
22 | lstrip() | Xóa tất cả khoảng trắng ở đầu chuỗi. | ” hello “.lstrip() -> “hello “ |
23 | maketrans() | Trả về bảng chuyển đổi để sử dụng trong hàm dịch. | table = str.maketrans(‘aeiou’, ‘12345’) |
24 | max(str) | Trả về ký tự có giá trị mã ASCII lớn nhất trong chuỗi. | max(“hello”) -> “o” |
25 | min(str) | Trả về ký tự có giá trị mã ASCII nhỏ nhất trong chuỗi. | min(“hello”) -> “e” |
26 | replace(old, new [, max]) | Thay thế tất cả các lần xuất hiện của old trong chuỗi bằng new hoặc tối đa max lần nếu max được cung cấp. | “hello”.replace(“l”, “y”) -> “heyyo” |
27 | rfind(str, beg=0, end=len(string)) | Tìm kiếm str trong chuỗi (hoặc trong một chuỗi con của chuỗi nếu chỉ mục bắt đầu beg và chỉ mục kết thúc end được cung cấp) từ cuối chuỗi về đầu. Nếu tìm thấy, trả về chỉ mục đầu tiên của str, nếu không trả về -1. | “hello”.rfind(“l”) -> 3 |
28 | rindex(str, beg=0, end=len(string)) | Tương tự như rfind(), nhưng nếu str không được tìm thấy thì sẽ ném ra một ngoại lệ. | “hello”.rindex(“l”) -> 3 |
29 | rjust(width, fillchar) | Trả về một chuỗi với chuỗi gốc được căn phải với tổng số cột là width. Chuỗi được lấp đầy bằng khoảng trắng nếu fillchar không được cung cấp. | “Python”.rjust(10) -> “ Python” |
30 | rstrip() | Loại bỏ tất cả các khoảng trắng ở cuối chuỗi | ” python “.rstrip() -> “ python” |
31 | split() | Chia chuỗi thành danh sách các chuỗi con dựa trên ký tự phân cách | “apple,banana,orange”.split(“,”) -> [‘apple’, ‘banana’, ‘orange’] |
32 | splitlines() | Chia chuỗi thành danh sách các chuỗi con dựa trên dấu xuống dòng | “First\nSecond\nThird”.splitlines() -> [‘First’, ‘Second’, ‘Third’] |
33 | startswith() | Xác định xem chuỗi hoặc một chuỗi con của chuỗi có bắt đầu bằng | “Python is cool”.startswith(“Python”) -> True |
34 | strip() | Loại bỏ tất cả các khoảng trắng ở đầu và cuối chuỗi | ” python “.strip() -> “python” |
35 | swapcase() | Đảo ngược chữ hoa thành chữ thường và ngược lại | “PyThOn”.swapcase() -> “pYtHoN” |
36 | title() | Trả về phiên bản chuỗi được định dạng Title | “hello world”.title() -> “Hello World” |
37 | translate() | Trả về một bản sao của chuỗi với các ký tự đã được dịch theo bảng | “Hello”.translate(str.maketrans(“H”, “J”)) -> “Jello” |
38 | upper() | Chuyển đổi tất cả các chữ thường trong chuỗi thành chữ hoa | “python”.upper() -> “PYTHON” |
39 | zfill() | Thêm các số 0 vào đầu chuỗi để đạt độ dài đã chỉ định | “42”.zfill(5) -> “00042” |
40 | isdecimal() | Xác định xem chuỗi có chứa các ký tự số thập phân hay không | “42”.isdecimal() -> True |
Bình luận