12 - Các phương thức chuỗi trong Python (phần 2)

#Các phương thức tách chuỗi

##Phương thức split

Cú pháp:

<chuỗi>.split(sep=None, maxsplit=-1)

Trả về một list (kiểu dữ liệu sẽ được Kteam giới thiệu ở bài sau) bằng cách chia các phần tử bằng kí tự sep. Nếu sep mặc định bằng None thì sẽ dùng kí tự khoảng trắng
Nếu maxsplit được mặc định bằng -1, Python sẽ không bị giới hạn việc tách, còn không, Python sẽ tách với số lần được cung cấp thông qua maxsplit

>>> 'Mikami Yua IDOL'.split()
['Mikami', 'Yua', 'IDOL']
>>> 'Mikami Yua IDOL'.split(maxsplit=1)
['Mikami', 'Yua IDOL']
>>> 'Mikami--Yua--IDOL'.split('--')
['Mikami', 'Yua', 'IDOL']
>>> 'Mikami&Yua&IDOL'.split('&')
['Mikami', 'Yua', 'IDOL']

##Phương thức rsplit

Cú pháp:

<chuỗi>.split(sep=None, maxsplit=-1)

Cũng hoàn toàn như phương thức split, có điều là việc tách từ bên phải sang trái

>>> 'Mikami Yua IDOL'.rsplit()
['Mikami', 'Yua', 'IDOL']
>>> 'Mikami Yua IDOL'.rsplit(maxsplit=1)
['Mikami Yua', 'IDOL']

##Phương thức partition

Cú pháp:

<chuỗi>.partition(sep)

Trả về một tuple với 3 phần tử. Các phần tử đó lần lượt là chuỗi trước chuỗi sep, sep và chuỗi sau sep. Trong trường hợp không tìm thấy sep trong chuỗi, mặc định trả về giá trị đầu tiên là chuỗi ban đầu và 2 giá trị kế tiếp là chuỗi rỗng

>>> 'Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi'.partition('vs')
('Yui Hatano ', 'vs', ' Akiho Yoshizawa vs Miku Ohashi')
>>> 'Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi'.partition('VS')
('Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi', '', '')

##Phương thức rpartition

Cú pháp:

<chuỗi>.rpartition(sep)

Cách phân chia giống như phương thức partition nhưng lại chia từ phải qua trái. Và với sep không có trong chuỗi thì sẽ trả về 2 giá trị đầu tiên là chuỗi rỗng và cuối cùng là chuỗi ban đầu

>>> 'Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi'.rpartition('vs')
('Yui Hatano vs Akiho Yoshizawa ', 'vs', ' Miku Ohashi')
>>> 'Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi'.rpartition('VS')
('', '', 'Yui Hatano vs Akiho Yoshizawa vs Miku Ohashi')

#Các phương thức tiện ích

##Phương thức count

Cú pháp:

<chuỗi>.count(sub, [start, [end]])

Trả về một số nguyên, chính là số lần xuất hiện của sub trong chuỗi. Còn start và end là số kĩ thuật slicing (lưu ý không hề có bước).

>>> 'aaaaa'.count('a')
5
>>> 'aaaaa'.count('aa')
2
>>> 'aaaaa'.count('a', 3)
2
>>> 'aaaaa'.count('a', 3, 4)
1

##Phương thức startswith

Cú pháp:

<chuỗi>.startswith(prefix[, start[, end]])

Trả về giá trị True nếu chuỗi đó bắt đầu bằng chuỗi prefix. Ngược lại là False. Hai thứ start end tượng trưng cho việc slicing (không có bước) để kiểm tra với chuỗi slicing đó.

>>> 'hohohaha'.startswith('ho')
True
>>> 'hohohaha'.startswith('ha')
False
>>> 'hohohaha'.startswith('ho', 4)
False

##Phương thức endswith

Cú pháp:

<chuỗi>.endswith(prefix[, start[, end]])

Trả về giá trị True nếu chuỗi đó kết thúc bằng chuỗi prefix. Ngược lại là False. Hai thứ start end tượng trưng cho việc slicing (không có bước) để kiểm tra với chuỗi slicing đó.

>>> 'hohohaha'.endswith('ha')
True
>>> 'hohohaha'.endswith('ho')
False
>>> 'hohohaha'.endswith('ha', 1, 4)
False

##Phương thức find

Cú pháp:

<chuỗi>.find(sub[, start[, end]])

Trả về một số nguyên, là vị trí đầu tiên của sub khi dò từ trái sang phải trong chuỗi. Nếu sub không có trong chuỗi, kết quả sẽ là -1. Vẫn như các phương thức khác, start end đại diện cho slicing và ta sẽ tìm trong chuỗi slicing này.

>>> 'abcdxyz'.find('a')
0
>>> 'abcdxyz'.find('d')
3
>>> 'abcdxyz'.find('l')
-1
>>> 'abcdxyz'.find('a', 2)
-1

##Phương thức rfind

Cú pháp:

<chuỗi>.rfind(sub[, start[, end]])

Tương tự phương thức find nhưng tìm từ phải sang trái

>>> 'abcdxayz'.rfind('a')
5

##Phương thức index

Cú pháp:

<chuỗi>.index(sub[, start[, end]])

Tương tự phương thức find. Nhưng khác biệt là sẽ có lỗi ValueError nếu không tìm thấy chuỗi sub trong chuỗi ban đầu

>>> 'abcd'.index('z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

##Phương thức rindex

Cú pháp:

<chuỗi>.rindex(sub[, start[, end]])

Tương tự phương thức rindex. Và cũng khác ở điểm là sẽ có ValueError nếu không tìm thấy chuỗi sub trong chuỗi ban đầu

>>> 'abcd'.rindex('z')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: substring not found

#Các phương thức xác thực

##Phương thức islower

Cú pháp:

<chuỗi>.islower()

Trả về True nếu tất cả các kí tự trong chuỗi đều là viết thường. Ngược lại là False

>>> 'abc'.islower()
True
>>> 'abC'.islower()
False

##Phương thức isupper

Cú pháp:

<chuỗi>.isupper()

Trả về True nếu tất cả các kí tự trong chuỗi đều là viết hoa. Ngược lại là False

>>> 'ABC'.isupper()
True
>>> 'AcC'.isupper()
False

##Phương thức istitle

Cú pháp:

<chuỗi>.istitle()

Trả về True nếu chuỗi đó là một dạng title. Ngược lại là False

>>> 'Born Hub'.istitle()
True
>>> 'BoRn Hub'.istitle()
False

##Phương thức isdigit

Cú pháp:

<chuỗi>.isdigit()

Trả về True nếu tất cả các kí tự trong chuỗi đều là những con số từ 0 đến 9
Lưu ý: Phương thức này gần giống với isnumeric. Nhưng vì hơi khá phức tạp nên mình sẽ không giới thiệu về phương thức isnumeric và cũng không so sánh sự khác nhau giữa hai phương thức.

>>> '0123'.isdigit()
True
>>> '123'.isdigit()
True
>>> '-123'.isdigit()
False

##Phương thức isspace

Cú pháp:

<chuỗi>.isspace()

Trả về True nếu tất cả các kí tự trong chuỗi đều là kí tự khoảng trắng

>>> '      '.isspace()
True
>>> '   d  '.isspace()
False

Link video của How Kteam

#Câu hỏi

Với chuỗi s bên dưới

>>> s = 'aaaAAaaaooaaneu mot Ngay naO Doaaaaaaa'

Hãy dùng các phương thức để có được chuỗi s sau đây

>>> s
'Neu Mot Ngay Nao Do'

Hãy cố gắng làm càng ít dòng code càng tốt.

#NEXT
13 - KIỂU DỮ LIỆU (LỚP) LIST TRONG PYTHON
#PREVIOUS
11 - CÁC PHƯƠNG THỨC CHUỖI TRONG PYTHON

Thế này phải không anh :

s = 'aaaAAaaaooaaneu mot Ngay naO Doaaaaaaa'
print(s.rstrip('a').lstrip('Aoa').title())
1 Like

:smile: Biết sử dụng phương thức là hay rồi. Còn ngắn nhất ở đây chỉ muốn cho các bạn biết được rằng cách ta có thể nối phương thức với nhau như bạn đã làm. Well-done.

1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?