Ở bài trước, ta đã biết rằng có thể dùng list
để lưu trữ các phần tử trong Python. Hôm nay, chúng ta sẽ tìm hiểu một kiểu dữ liệu tương tự là tuple
. Vậy:
Tuple
là gì? Có gì khác biệt vớilist
?- Làm sao để truy cập được phần tử của một
tuple
? - Những phương thức thường dùng với một
tuple
? - Tạo một
tuple
mới từtuple
đã cho trước như thế nào? - Unpack một
tuple
là làm gì?
Tuple là gì?
Giống như list, tuple là một tập hợp có thứ tự, chứa một số lượng hữu hạn các phần tử, chỉ khác ở chỗ các phần tử của tuple là không thể thay đổi được (immutable).
Vì tuple là bất biến sau khi được tạo ra nên nó có những ưu điểm sau so với list:
- Tốc độ duyệt các phần tử nhanh hơn.
- Ít tiêu tốn bộ nhớ hơn.
- Về mặt an toàn dữ liệu, tuple đảm bảo giá trị của các phần tử bên trong sẽ không bị thay đổi.
- Mã rõ ràng và dễ bảo trì, khi một dev khác vào đọc code và bắt gặp tuple họ sẽ biết ngay đấy là một tập hợp các phần tử không được phép thay đổi.
Ta dùng ngoặc tròn (round brackets) ()
để thể hiện một empty tuple: myTuple = ()
.
myTuple = ()
print(myTuple)
print(type(myTuple))
Output
()
<class 'tuple'>
Các phần tử trong một tuple được phân biệt bởi dấu phẩy ,
.
myTuple = (1, 2.3, 'abc')
print(myTuple)
Output
(1, 2.3, 'abc')
Tuple chỉ có một phần tử là một trường hợp đặc biệt về syntax, ta cần thêm dấu ,
phía sau phần tử đầu tiên:
wrongTuple = (1)
standardTuple = (1,)
print(wrongTuple)
print(type(wrongTuple))
print(standardTuple)
print(type(standardTuple))
Output
1
<class 'int'>
(1,)
<class 'tuple'>
Truy cập phần tử
Dựa vào chỉ số cụ thể ta có thể truy cập phần tử của một tuple:
numbers = (1,2,3,4,5)
print(numbers[1])
print(numbers[-1])
print(numbers[-6])
Output
2
5
IndexError: tuple index out of range
Sử dụng cú pháp yourTuple[start:end]
nếu bạn muốn lấy ra một tuple con. Trong đó, start
và end
có giá trị mặc định lần lượt là 0
và k+1
, với k
là chỉ số của phần tử cuối cùng trong tuple.
numbers = (1,2,3,4,5)
newNumbersA = numbers[1:3]
newNumbersB = numbers[1:]
newNumbersC = numbers[:3]
print(numbers)
print(newNumbersA)
print(newNumbersB)
print(newNumbersC)
Output
(1, 2, 3, 4, 5)
(2, 3)
(2, 3, 4, 5)
(1, 2, 3)
Những phương thức cơ bản
len
Phương thức len
sẽ trả cho ta chiều dài của tuple:
myTuple = (1,2,3,2,5)
tupleLength = len(myTuple)
print(tupleLength)
Output
5
count
Muốn xác định số lần xuất hiện của một phần tử trong tuple ta có thể dùng phương thức count
:
myTuple = (1,2,3,2,5)
countNumberTwo = myTuple.count(2)
print(countNumberTwo)
Output
2
index
Để tìm vị trí xuất hiện đầu tiên của một phần tử trong tuple ta sử dụng phương thức index
:
numbers = (1,2,3,4,5)
firstIndexFound = numbers.index(2)
print(firstIndexFound)
Output
1
Tạo tuple mới từ tuple cho trước
Với một tuple cho trước ta có thể tạo ra một tuple mới bằng cách:
- Chuyển tuple về list.
- Update list.
- Chuyển list về lại tuple.
Thêm
customers = ('Ivy', 'Oliver', 'Michael')
print(customers)
tempList = list(customers)
print(tempList)
tempList.append('Peter')
print(tempList)
customers = tuple(tempList)
print(customers)
Output
('Ivy', 'Oliver', 'Michael')
['Ivy', 'Oliver', 'Michael']
['Ivy', 'Oliver', 'Michael', 'Peter']
('Ivy', 'Oliver', 'Michael', 'Peter')
Xóa
customers = ('Ivy', 'Oliver', 'Michael')
print(customers)
tempList = list(customers)
print(tempList)
tempList.remove('Oliver')
print(tempList)
customers = tuple(tempList)
print(customers)
Output
('Ivy', 'Oliver', 'Michael')
['Ivy', 'Oliver', 'Michael']
['Ivy', 'Michael']
('Ivy', 'Michael')
Sửa
customers = ('Ivy', 'Oliver', 'Michael')
print(customers)
tempList = list(customers)
print(tempList)
tempList[1] = 'Peter'
print(tempList)
customers = tuple(tempList)
print(customers)
Output
('Ivy', 'Oliver', 'Michael')
['Ivy', 'Oliver', 'Michael']
['Ivy', 'Peter', 'Michael']
('Ivy', 'Peter', 'Michael')
Unpack tuple
Trước khi kết thúc bài hôm nay, chúng ta hãy tìm hiểu một chút về unpack tuple, xét một ví dụ cụ thể:
Giả sử một thành phố A có nhiệt độ hiện tại là 28 độ, độ ẩm là 75%, các thông tin này được biểu diễn như sau:
weather = ("cityA", 28, 75)
Trong Python, hành động gán tuple ("cityA", 28, 75)
vào biến weather
được gọi là hành động đóng gói dữ liệu (pack). Thông thường, để lấy thông tin của thành phố ta sẽ lấy giá trị của từng phần tử: weather[0]
, weather[1]
,… Cách viết này không thể hiện rõ thông tin của giá trị được lấy ra. Lúc này việc mở gói dữ liệu (unpack) sẽ giúp ta có cách thể hiện tường minh hơn:
weather = ("cityA", 28, 75)
(city, temperature, humidity) = weather
print("The", weather[0], "has a temperature of", weather[1], "degrees and a humidity of", weather[2], "percent.")
print("The", city, "has a temperature of", temperature, "degrees and a humidity of", humidity, "percent.")
Output
The cityA has a temperature of 28 degrees and a humidity of 75 percent.
The cityA has a temperature of 28 degrees and a humidity of 75 percent.
Trường hợp khi unpack data mà số biến bên trái ít hơn số giá trị bên phải, ta có thể dùng dấu hoa thị (asterisk) *
để xử lý như sau:
myTuple = (1, 2, 'a', 'b', 'c', 3.4, 5.6, 7.8)
(firstNum, secondNum, *theRest) = myTuple
print(firstNum)
print(secondNum)
print(theRest)
Output
1
2
['a', 'b', 'c', 3.4, 5.6, 7.8]
Ở đoạn code trên, do phía sau *theRest
không còn biến nào nên Python sẽ gán tất cả các phần tử còn lại dưới dạng list cho biến theRest
. Nếu còn biến phía sau *theRest
Python sẽ gán k - m
phần tử dưới dạng list vào biến theRest
, với k
là số phần tử còn lại và m
là số biến phía sau theRest
.
myTuple = (1, 2, 'a', 'b', 'c', 3.4, 5.6, 7.8)
(firstNum, secondNum, *theRest, doubleA, doubleB) = myTuple
print(firstNum)
print(secondNum)
print(theRest)
print(doubleA)
print(doubleB)
Output
1
2
['a', 'b', 'c', 3.4]
5.6
7.8
Kết thúc bài hôm nay, chúng ta đã hiểu được tuple là gì, nó có điểm khác biệt gì so với list, cách truy cập phần tử của tuple, các phương thức hay dùng với tuple, cách tạo một tuple mới và khái niệm unpack tuple trong Python. Chúc các bạn học tốt!
Python cơ bản
Phần 1: Kiến thức tổng quan
Cú pháp (syntax)
Biến (variables)
Chuỗi ký tự (strings)
Số (numbers) trong Python
Boolean trong Python
Vòng lặp trong Python
Danh sách (list) trong Python
Bộ dữ liệu (tuple) trong Python
Đường tuy ngắn không đi không đến; Việc tuy nhỏ không làm không nên.