Bộ dữ liệu (tuple) trong Python

Ở 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:

  1. Tuple là gì? Có gì khác biệt với list?
  2. Làm sao để truy cập được phần tử của một tuple?
  3. Những phương thức thường dùng với một tuple?
  4. Tạo một tuple mới từ tuple đã cho trước như thế nào?
  5. 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 đó, startend có giá trị mặc định lần lượt là 0k+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

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