Python-chuỗi kí tự

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

Be the first to comment

Leave a Reply