Contents
- 1 Chuỗi kí tự
- 2 Các kí tự trong chuỗi kí tự
- 3 Unicode
- 4 Quote
- 5 Chiều dài string
- 6 Hàm loại bỏ kí tự trắng
- 7 Kí tự đặc biệt
- 8 So sánh string
- 9 Truy xuất phần tử string
- 10 Tìm substring
- 11 Thao tác string cơ bản
- 12 Thay thế string
- 13 Tách, nối string
- 14 String in hoa, in thường
- 15 Các function xử lí string khác
- 16 Format string
Trong phần này của hướng dẫn lập trình Python, chúng ta tìm hiểu chuỗi kí tự chi tiết hơn.
Chuỗi kí tự
Chuỗi kí tự trong Python là một chuỗi các ký tự. Chuỗi là bất biến. Điều này có nghĩa là khi bạn định nghĩa 1 chuỗi kí tự, chúng sẽ không thể thay đổi được. Nhiều phương thức Python, chẳng hạn như replace(), join() hoặc split() sửa đổi các chuỗi. Tuy nhiên, các hàm không sửa đổi chuỗi kí tự ban đầu. Các hàm này chỉ tạo một bản sao của một chuỗi và trả về chuỗi bản sao đó.
Các kí tự trong chuỗi kí tự
Chuỗi Python có thể được tạo bằng dấu ngoặc kép, dấu ngoặc kép hoặc dấu ngoặc kép. Khi chúng ta sử dụng dấu ngoặc kép, các chuỗi có thể kéo dài nhiều dòng mà không cần sử dụng ký tự xuống dòng.
Ví dụ 1: khai báo string
# string_literals.py a = "proximity alert" b = 'evacuation' c = """ requiem for a tower """ print(a) print(b) print(c)
Chúng ta gán ba ký tự chuỗi cho các biến a, b và c. Và chúng tôi in chúng ra màn hình console
Kết quả:
proximity alert evacuation requiem for a tower
Unicode
Để tạo unicode string, add thêm u hoặc U vào đầu mỗi string như ví dụ sau:
Ví dụ 2: Unicode string
text = u'\u041b\u0435\u0432 \u041d\u0438\u043a\u043e\u043b\u0430\ \u0435\u0432\u0438\u0447 \u0422\u043e\u043b\u0441\u0442\u043e\u0439: \n\ \u0410\u043d\u043d\u0430 \u041a\u0430\u0440\u0435\u043d\u0438\u043d\u0430' print(text)
Kết quả in ra chuỗi tiếng Nga
C:\Programs\Python\Python37>python.exe test.py Лев Николаевич Толстой: Анна Каренина
Ngoài ra, chúng ta có thể sử dụng kí tự tiếng Nga luôn khi define string.
Ví dụ 3: Unicode string
text = 'Лев Николаевич Толстой: Анна Каренина' print(text)
Kết quả script unicode2.py là
C:\Programs\Python\Python37>python.exe test.py Лев Николаевич Толстой: Анна Каренина
Quote
String trong Python được phân cách bằng các kí tự nháy đơn hoặc nháy kép. Điều gì sẽ xảy ra nếu chúng ta muốn hiển thị dấu ngoặc kép, chẳng hạn như để trích dẫn câu nói, bài phát biểu. Có hai cách cơ bản để làm điều này.
Ví dụ 4: Quote trong string
print("There are many stars.") print("He said, \"Which one is your favourite?\"") print('There are many stars.') print('He said, "Which one is your favourite?"')
Chúng ta sử dụng kí tự \” để thêm kí tự ” vào string.
Kết quả:
There are many stars. He said, "Which one is your favourite?" There are many stars. He said, "Which one is your favourite?"
Chiều dài string
Hàm len() đếm số lượng kí tự string, bao gồm cả kí tự space.
Ví dụ 5: đếm số lượng kí tự string
s1 = "Eagle" s2 = "Eagle\n" s3 = "Eagle " print(len(s1)) print(len(s2)) print(len(s3))
Ví dụ 6: tính chiều dài của string s1,s2,s3
s1 = "Eagle" s2 = "Eagle\n" s3 = "Eagle "
Define 3 string. String s2 chứa kí tự xuống dòng \n. String s3 chứa kí tự space.
print(len(s1))
Sử dụng hàm len() có sẵn trong Python để đo chiều dài string.
Kết quả:
5 6 7
Từ kết quả chúng ta có thể thấy hàm len() đếm cả kí tự đặc biệt như xuống dòng, kí tự space.
Hàm loại bỏ kí tự trắng
Trong xử lý string, chúng ta thường kết thúc chuỗi với kí tự space ở đầu hoặc cuối string. Space được biết đến như kí tự xuống dòng, tab, space hoặc kí tự điều khiển. Chúng ta có hàm strip(), lstrip() và rstrip() để xóa các kí tự này.
Ví dụ 7: Xóa kí tự space
s = " Eagle " s2 = s.rstrip() s3 = s.lstrip() s4 = s.strip() print('{0} {1}'.format(s, len(s))) print('{0} {1}'.format(s2, len(s2))) print('{0} {1}'.format(s3, len(s3))) print('{0} {1}'.format(s4, len(s4)))
Ví dụ này, chúng ta gọi hàm để loại bỏ kí tự space.
s2 = s.rstrip()
Hàm rstrip() loại bỏ tất cả kí tự ở đuôi string
s3 = s.lstrip()
Hàm lstrip() loại bỏ tất cả kí tự space ở đầu string
s4 = s.strip()
Hàm strip() loại bỏ tất cả kí tự space ở đầu và đuôi string
print('{0} {1}'.format(s2, len(s2)))
Hàm format() được sử dụng để build string theo 1 format riêng. {0} là kí tự điều khiển tham chiếu tới tham số đầu tiên hàm format(), {1} tham chiều tới tham số thứ 2.
Kết quả:
Eagle 8 Eagle 6 Eagle 7 Eagle 5
Đây là kết quả script stripping.py
Kí tự đặc biệt
Chúng ta có thể sử dụng kí tự đặc biệt như: xuống dòng, tab,… trong string python cho từng mục đích riêng.
Ví dụ 8: kí tự đặc biệt trong string
print("Incompatible, it don't matter though\n'cos someone's bound to hear my cry") print("Speak out if you do\nYou're not easy to find")
Kí tự xuống dòng \n được dùng trong ví dụ này
Incompatible, it don't matter though 'cos someone's bound to hear my cry Speak out if you do You're not easy to find
Tiếp theo, chúng ta tìm hiểu kí tự backspace
Ví dụ 9: kí tự backspace
print("Python\b\b\booo") # prints Pytooo
String trong ví dụ này có 3 kí tự \b. Kí tự backspace lùi và xóa kí tự trước nó. Kết quả chúng ta được string “Pytooo”
print("Towering\tinferno") # prints Towering inferno
Kí tự tab \t thêm 8 space vào string
Nếu chúng ta thêm kí tự r vào đầu string, chúng ta nhận được raw string, trong đó các kí tự điều khiển không được thông dịch.
print(r"Another world\n")
Kết quả chúng ta thu được string có kí tự xuống dòng \n
Another world\n
So sánh string
Để so sánh 2 string, chúng ta dùng toán tử bằng == hoặc toán tử khác != . Toán tử trả về True hoặc False
Ví dụ 10: so sánh 2 string
print("12" == "12") print("17" == "9") print("aa" == "ab") print("abc" != "bce") print("efg" != "efg")
Trong ví dụ này, chúng ta so sánh 1 vài string.
print("12" == "12")
2 string này giống nhau, trả về True
print("17" == "9")
2 string này khác nhau, trả về False
print("aa" == "ab")
2 string khác nhau, trả về False
print("abc" != "bce")
2 string khác nhau, toán tử khác trả về True
print("efg" != "efg")
2 string giống nhau, toán tử khác trả về False
Kết quả:
C:\Programs\Python\Python37>python.exe test.py True False False True False
Truy xuất phần tử string
string_elements.py
# string_elements.py s = "Eagle" print(s[0]) print(s[4]) print(s[-1]) print(s[-2]) print("****************") print(s[0:4]) print(s[1:3]) print(s[:])
Để lấy phần tử trong string python, chúng ta sử dụng index
print(s[0]) print(s[4])
Dòng đầu in ra kí tự đầu tiên. Lệnh print thứ 2 in ra kí tự thứ 5.
print(s[-1]) print(s[-2])
Khi index < 0, chúng ta lấy các phần tử từ cuối string. Trong ví dụ này, s[-1] trả về kí tự ‘e’, s[-2] trả về kí tự ‘l’
print(s[0:4])
In ra các kí tự 5 kí tự index từ 0->4
print(s[:])
In ra tất cả các kí tự trong string
Kết quả:
C:\Programs\Python\Python37>python.exe test.py E e e l **************** Eagl ag Eagle
Chúng ta có thể dùng vòng lặp for để duyệt qua các phần tử trong string
traverse.py
# traverse.py s = "Vncoding" for i in s: print(i, " ", end="")
In tất cả các kí tự string s
C:\Programs\Python\Python37>python.exe traverse.py V n c o d i n g
Tìm substring
– Hàm find(), rfind(), index() và rindex() được sử dụng để tìm substring trong 1 string.
– Các hàm này trả về index xuất hiện đầu tiên của substring trong string.
– Hàm find() và index() tìm kiếm từ điểm bắt đầu của string. Hàm rfind() và rindex() tìm kiếm bắt đầu từ cuối string.
Sự khác nhau giữa hàm find() và index() là khi không tìm thấy substring, hàm trả về -1, raise exception ValueError.
find(str, beg=0, end=len(string)) rfind(str, beg=0, end=len(string)) index(str, beg=0, end=len(string)) rindex(str, beg=0, end=len(string))
– str: search substring
– beg: begin index (giá trị default là 0)
– end: end index (giá trị default là chiều dài của string)
Ví dụ: substrings.py tìm substring
a = "I'm crypto holder. The crypto market is now bear, but i don't fear" print(a.find("crypto")) print(a.find("crypto", 10, 20)) print(a.find("crypto", 15)) print(a.rfind("crypto"))
Giải thích:
print(a.find("crypto"))
– a.find(“crypto”) tìm substring “crypto” trong string a, trả về 4 – vị trí đầu tiên xuất hiện string “crypto”
– a.find(“crypto”, 10, 20) tìm substring “crypto” trong string a từ vị trí 10 -> 20, không tìm thấy và trả về -1
– a.find(“crypto”, 15) tìm substring “crypto” trong string từ vị trí 15 đến cuối string a, trả về 23 – vị trí xuất hiện string “crypto”
– a.rfind(“crypto”) tìm substring “crypto” từ cuối đến đầu string a, trả về 23 – vị trí xuất hiện substring “crypto”
Kết quả:
C:\Python\Python37>python.exe substrings.py 4 -1 23 23
Thao tác string cơ bản
Chúng ta cùng tìm hiểu nối string trong ví dụ dưới đây
print("Vncoding " * 5) print("Vncoding" ".net") print("Coding " + "and " + "Life")
Giải thích:
print("Vncoding " * 5)
Toán tử * lặp lại việc in string “Vncoding ” 5 lần
print("Vncoding" ".net")
In ra 2 string liên tiếp.
print("Coding " + "and " + "Life")
Toán tử + nối các string.
Kết quả:
C:\Python\Python37>python.exe test.py VncodingVncodingVncodingVncodingVncoding Vncoding.net Coding and Life
Ví dụ: Sử dụng len() để tính toán chiều dài string
a = "Vncoding.net" print(a, len(a), "Hoc lap trinh A-Z")
Kết quả:
C:\Python\Python37>python.exe test.py Vncoding.net 12 Hoc lap trinh A-Z
Ví dụ: Convert number sang string và ngược lại
a = "Vncoding.net" print(a + str(2022)) print(float("2.22") + 3.95)
Kết quả:
C:\Python\Python37>python.exe test.py Vncoding.net2022 6.17
Thay thế string
Function replace dùng để thay thế substring trong string bằng substring khác.
replace(old, new [, max])
– old: substring cần thay thế
– new: substring thay thế
– max: số lượng vị trí cần thay thế ( default là thay thế tất cả các vị trị xuất hiện substring old )
Ví dụ:
a = "I'm crypto holder, my friends are crypto holder" b = a.replace("holder", "trader", 1); c = a.replace("holder", "trader"); print(a) print(b) print(c)
Giải thích:
b = a.replace("holder", "trader", 1);
Thay thế substring “holder” bằng “trader” tại vị trí xuất hiện đầu tiên. b là string đã thay thế “holder” bằng “trader”.
c = a.replace("holder", "trader");
Thay thế substring “holder” bằng “trader” tại tất cả các vị trí xuất hiện. c là string đã thay thế “holder” bằng “trader”.
Kết quả:
C:\Python\Python37>python.exe test.py I'm crypto holder, my friends are crypto holder I'm crypto trader, my friends are crypto holder I'm crypto trader, my friends are crypto trader
Tách, nối string
Sử dụng hàm split hoặc rsplit để phân tách string.
split(sep, max)
rsplit(sep, max)
– sep: separator
– max: số lượng phân tách string
– Function này trả về list string phân tách.
Xét ví dụ sau
nums = "1,5,6,8,2,3,1,9" k = nums.split(",") print(k) l = nums.split(",", 5) print(l) m = nums.rsplit(",", 3) print(m)
Giải thích:
k = nums.split(",")
– Phân tách tất cả substring bởi kí tự ‘,’
– List k chứa list separate string
l = nums.split(",", 5)
– Phân tách 5 substring bởi kí tự ‘,’
– List l chứa list separate string
m = nums.rsplit(",", 3)
– Phân tách 3 substring từ cuối.
– List m chứa list separate string
Kết quả:
C:\Python\Python37>python.exe test.py ['1', '5', '6', '8', '2', '3', '1', '9'] ['1', '5', '6', '8', '2', '3,1,9'] ['1,5,6,8,2', '3', '1', '9']
Sử dụng hàm join để nối string.
Xét ví dụ sau
nums = "1,5,6,8,2,3,1,9" n = nums.split(",") print(n) m = ':'.join(n) print(m)
Giải thích:
n = nums.split(",")
Tách chuỗi bởi kí tự “,” và lưu vào list n
m = ':'.join(n)
Nối chuỗi được lưu trong list n và cách nhau bởi dấu :
Kết quả:
C:\Python\Python37>python.exe test.py ['1', '5', '6', '8', '2', '3', '1', '9'] 1:5:6:8:2:3:1:9
Ngoài ra, còn sử dụng hàm partition(sep) (sep: separator) để phân tách string. Function này sẽ phân tách string tại vị trí xuất hiện đầu tiên của separator, và trả về tutple 3 phần tử, substring trước separator, substring sau separtor và separator.
Ví dụ: phân tách string sử dụng partition
s = "1 + 2 + 3 = 6" a = s.partition("=") print(a)
Kết quả:
C:\Python\Python37>python.exe test.py ('1 + 2 + 3 ', '=', ' 6')
String in hoa, in thường
Python cung cấp 4 function xử lí chữ in hoa, in thường. Các function này trả về string đã được modify.
Ví dụ: convert chữ in hoa, in thường
a = "VnCoding" print(a.upper()) print(a.lower()) print(a.swapcase()) print(a.title())
Giải thích:
print(a.upper())
Convert tất cả các kí tự trong string thành chữ in hoa
print(a.lower())
Convert tất cả các kí tự trong string thành chữ in thường
print(a.swapcase())
Các kí tự thường được convert thành kí tự in hoa, các kí tự in hoa được convert thành kí tự thường.
print(a.title())
Kí tự đầu được convert thành in hoa, các kí tự còn lại là in thường.
Kết quả:
C:\Python\Python37>python.exe test.py VNCODING vncoding vNcODING Vncoding
Các function xử lí string khác
Ngoài các built-in function ở trên, Python còn cung cấp các built-in function khác rất hữu ích cho việc xử lí string
Ví dụ: đếm kí tự alphabet và chữ số trong string
sentence = "Happy new year 2022" alphas = 0 digits = 0 spaces = 0 for i in sentence: if i.isalpha(): alphas += 1 if i.isdigit(): digits += 1 if i.isspace(): spaces += 1 print("There are", len(sentence), "characters") print("There are", alphas, "alphabetic characters") print("There are", digits, "digits") print("There are", spaces, "spaces")
Trong ví dụ này, sử dụng built-in function sau:
– len(): trả về độ dài string
– isalpha(): kiểm tra kí tự có phải alphabet hay không
– isdigit(): kiểm tra kí tự có phải chữ số hay không
– isspace(): kiểm tra kí tự có phải space hay không
Kết quả:
There are 19 characters There are 12 alphabetic characters There are 4 digits There are 3 spaces
Ví dụ: Nối string
print("Ajax Amsterdam" " - " "Inter Milano " "2:3") print("Real Madridi" " - " "AC Milano " "3:3") print("Dortmund" " - " "Sparta Praha " "2:1")
Kết quả:
Ajax Amsterdam - Inter Milano 2:3 Real Madridi - AC Milano 3:3 Dortmund - Sparta Praha 2:1
Tiếp theo, chúng ta tìm hiểu cách định dạng string in ra màn hình console.
Format string
Chúng ta có thể string động in ra màn hình console. String động được format bởi toán tử % hoặc phương thức format()
Ví dụ: Format string đơn giản
print('There are %d oranges in the basket' % 32) print('There are {0} oranges in the basket'.format(32))
print('There are %d oranges in the basket' % 32)
Sử dụng %d là format specifier. Sau string, sử dụng toán tử % và đối số 32
print('There are {0} oranges in the basket'.format(32))
Một cách khác để format string, sử dụng format specifier {0}, sau string sử dụng phương thức kèm đối số format(32).
Kết quả:
There are 32 oranges in the basket There are 32 oranges in the basket
Ví dụ: Format string đơn giản
print('There are %d oranges and %d apples in the basket' % (12, 23)) print('There are {0} oranges and {1} apples in the basket'.format(12, 23))
Kết quả:
There are 12 oranges and 23 apples in the basket There are 12 oranges and 23 apples in the basket
Ví dụ: Format string với float và string
print('Height: %f %s' % (172.3, 'cm')) print('Height: {0:f} {1:s}'.format(172.3, 'cm'))
print('Height: %f %s' % (172.3, 'cm'))
Sử dụng format specifier %f cho float, %s cho string.
print('Height: {0:f} {1:s}'.format(172.3, 'cm'))
Add thêm kí tự f và s để format float và string.
Kết quả:
Height: 172.300000 cm Height: 172.300000 cm
Để control số lượng chữ số thập phân in ra, chúng ta xem ví dụ sau
Ví dụ: Control số lượng chữ số thập phân in ra
print('Height: %.2f %s' % (172.3, 'cm')) print('Height: {0:.3f} {1:s}'.format(172.3, 'cm'))
2f nghĩa là cho phép in ra 2 chữ số sau dấu thập phân, 3f nghĩa là cho phép in ra 3 chữ số sau chữ số thập phân.
Kết quả:
Height: 172.30 cm Height: 172.300 cm
Ví dụ: Các kiểu format string khác
# hexadecimal print("%x" % 300) print("%#x" % 300) # octal print("%o" % 300) # scientific print("%e" % 300000)
%x là format specifier cho số hexa (hệ 16), kí tự x sẽ add thêm 0x vào định dạng string in ra.
%o là format specifier cho số octo (hệ 8).
%e là format specifier cho số mũ.
Kết quả:
12c 0x12c 454 3.000000e+05
Ngoài ra, có thể sử dụng phương thức format() để in ra số hexa, octo, binary
Ví dụ: sử dụng format() in ra định dạng hexa, octo, binary
# hexadecimal print("{:x}".format(300)) print("{:#x}".format(300)) # binary print("{:b}".format(300)) # octal print("{:o}".format(300)) # scientific print("{:e}".format(300000))
Kết quả:
12c 0x12c 100101100 454 3.000000e+05
Ví dụ: in ra màn hình console 3 cột chữ số
for x in range(1, 11): print('%d %d %d' % (x, x*x, x*x*x))
Kết quả:
1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
Kết quả in ra màn hình console không được căn lề. Để căn lề, chúng ta sử dụng độ rộng của object (int, float, string,…), nếu object nhỏ hơn độ rộng, kết quả in ra sẽ được thêm space. Xét ví dụ sau đây
Ví dụ: thêm thuộc tính độ rộng format specifier
for x in range(1, 11): print('%2d %3d %4d' % (x, x*x, x*x*x))
%2d là format specifier cho số nguyên có độ rộng 2 kí tự
%3d là format specifier cho số nguyên có độ rộng 3 kí tự
…
Hoặc bạn có thể sử dụng format() như sau
for x in range(1, 11): print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
Kết quả:
1 1 1 2 4 8 3 9 27 4 16 64 5 25 125 6 36 216 7 49 343 8 64 512 9 81 729 10 100 1000
Leave a Reply
You must be logged in to post a comment.