String trong Python


Hôm nay ta sẽ học kỹ hơn về string trong python nhé. Ta cũng đã biết cách khai báo 1 string rồi.

     #index:01234
my_string ="Hello"

string cũng giống như list cũng có index. Ta muốn truy cập vào ký tự đầu tiên ta làm giống như list.

print(my_string[0])  # H

Ta cũng có thể tính độ dài của string này là bao nhiêu ký tự.

length = len(my_string)
print(length) # 5

Truy cập vào ký tự cuối cùng.

last = my_string[length-1]
print(last) # o

Loop qua các ký tự trong chuỗi.

for char in my_string:
    print(char)

# H
# e
# l
# l
# o   

Còn nếu muốn cắt chuỗi thì ta làm giống như trong list.

     #index: 012345678
my_string = "Hello2020"

# index 0 to index 4
sub_string = my_string[0:5] 

print(sub_string)  # Hello

# begin to index 4 
sub_string2 = my_string[:5] 
print(sub_string2)  # Hello

# begin from index 5 to end
sub_string3 = my_string[5:] 
print(sub_string3)  # 2020

Lưu ý là string là immutable, có nghĩa là không thể gán giá trị như trong list được.

my_string[0] = 'K'
# TypeError: 'str' object does not support item assignment

Nếu thay đổi string thì ta dùng cách sau.

new_string = 'K' + my_string[1:]
print(new_string) # Kello

Còn muốn kiểm tra ký tự có nằm trong string hay không.

print('a' in 'hello') # False

Trong string có những build-in method.

my_string = "welcome to python 3"
print(dir(my_string))
# ['__add__', '__class__', '__contains__', '__delattr__', '__dir__',
# '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
# '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__',
# '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__',
# '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__',
# '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__',
# '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode',
# 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index',
# 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier',
# 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
# 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace',
# 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split',
# 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate',
# 'upper', 'zfill']

Ta xem một số hàm thường dùng như.

chuyển chuỗi thành viết hoa.

print(my_string.upper())
print(my_string)  # WELCOME TO PYTHON 3

Hoặc viết hoa ký tự đầu câu.

print(my_string.capitalize()) # Welcome to python 3 

Hoặc viết in hoa tất cả ký tự đầu của từ.

print(my_string.title()) # # Welcome To Python 3 

Ta có thể tìm 1 ký tự có nằm trong chuỗi không. Nếu có trả về true, nếu không là false.

print(my_string.startswith('w')) # True

Hoặc nếu muốn biết ký tự nằm ở index số mấy ta dùng find(..).

my_string = 'welcome to python 3'
index = my_string.find('e')
print(index) # 1

hàm find('e') sẽ tìm ký tự e đầu tiên có index là 1. Nếu muốn tìm xem ký tự e thứ 2 của chuỗi nằm ở index số mấy.

index2 = my_string.find('e', 2) # find at index 2
print(index2) # 6

Nếu ta có 1 email : example@yahoo.com. Ta muốn lấy ra phần yahoo.com ta làm như sau.

#index:012345678...
msg = "example@yahoo.com"

index3 = msg.find('@')
print(index3) # index 7

Ta thấy 'yahoo.com' bắt đầu ở index 8. Ta lấy ra như sau.

mail = msg[index3+1:]
print(mail) # yahoo.com

Ta cũng thường in giá trị kèm theo chuỗi như sau.

name = 'Mr D'
age = 35
print("My name is " + name + ". My age is " + str(age)+ ".")

# My name is Mr D. My age is 35.

Cách này làm hơi phức tạp vì ta phải chuyển kiểu int sang str rồi mới nối chuỗi. Ta có cách khác đơn giản hơn.

info = "My name is %s. My age is %d."
print(info %(name,  age))
# My name is Mr D. My age is 35.

%s : là chuỗi. %d : là số nguyên.

Ta có cách sau đơn giản hơn nữa.

info2 = f"My name is {name}. My age is {age}."
print(info2)
# My name is Mr D. My age is 35.

Ta có thể dùng cách sau cũng đơn giản như cách trên.

info3 = "My name is {}. My age is {}."
print(info3.format(name, age))

Như vậy ta đã tìm hiểu cách sử dụng string rồi nhé. ^_^