Tuple trong Python là một khái niệm quan trọng, thường xuyên được sử dụng trong nhiều tình huống khác nhau. Kiểu dữ liệu này có những đặc điểm riêng biệt, đóng vai trò không nhỏ trong việc xây dựng và tối ưu hóa các chương trình. Vậy, tuple trong Python thực chất là gì và có những tính năng cơ bản nào? Để có cái nhìn tổng quan và chi tiết, mời bạn theo dõi bài viết dưới đây.
Các điểm chính
Khi đọc xong bài viết, bạn sẽ:
- Hiểu Rõ Bản Chất Tuple: Nắm vững khái niệm “Tuple là gì?” trong Python, điểm khác biệt so với các kiểu dữ liệu khác như List (danh sách). Bạn sẽ hiểu khi nào nên sử dụng Tuple thay vì List để tối ưu code.
- Thành Thạo Thao Tác Cơ Bản: Bạn sẽ biết cách tạo Tuple, truy cập các phần tử bên trong, thực hiện các phép toán, cũng như các kỹ thuật indexing (chỉ mục), slicing (cắt) trên Tuple một cách dễ dàng.
- Làm Chủ Các Hàm Tuple: Bạn sẽ làm quen và sử dụng thành thạo các hàm tích hợp sẵn (built-in functions) thường dùng với Tuple để giải quyết các vấn đề lập trình cụ thể.
- Ứng Dụng Tuple Trong Thực Tế: Bài viết sẽ gợi ý các tình huống cụ thể mà Tuple tỏ ra hữu ích, từ đó giúp bạn áp dụng kiến thức vào các dự án thực tế của mình.
Tuple trong Python là gì?
Tuple là một trong những kiểu dữ liệu tích hợp sẵn (built-in) trong Python. Một tuple trong Python là một chuỗi các phần tử được phân tách bằng dấu phẩy ,
nằm trong cặp ngoặc tròn ()
. Các phần tử trong một tuple không nhất thiết phải cùng kiểu dữ liệu.

Dưới đây là một vài ví dụ về tuple trong Python:
tup1 = ("An", "Vật lý", 21, 69.75)
tup2 = (1, 2, 3, 4, 5)
tup3 = ("a", "b", "c", "d")
tup4 = (25.50, True, -55, 1 + 2j)
Tuple rỗng được viết bằng hai dấu ngoặc tròn không chứa gì bên trong:
tup1 = ();
Để viết một tuple chỉ chứa một giá trị, bạn phải thêm dấu phẩy vào sau giá trị đó, ngay cả khi chỉ có một giá trị:
tup1 = (50,);
Lưu ý:
- Trong Python,
tuple
là một kiểu dữ liệu dạng chuỗi (sequence).Tuple
là một tập hợp các phần tử có thứ tự. Mỗi phần tử trongtuple
có một chỉ số vị trí duy nhất, bắt đầu từ 0. - Trong các ngôn ngữ như C/C++/Java, các phần tử của mảng (
array
) phải cùng kiểu dữ liệu. Ngược lại,tuple
trong Python có thể chứa các đối tượng thuộc nhiều kiểu dữ liệu khác nhau. - Cả
tuple
vàList
trong Python đều là các kiểu dữ liệu dạng chuỗi. Tuy nhiên, điểm khác biệt lớn giữaList
vàtuple
đó là:List
có thể thay đổi được (mutable), trong khituple
thì không thể thay đổi được (immutable). Bạn có thể truy cập bất kỳ phần tử nào củatuple
thông qua chỉ số của phần tử đó, nhưng bạn không thể sửa đổi, xóa, hay thêm phần tử vàotuple
sau khituple
đã được tạo.
Truy cập giá trị trong Tuple
Để truy cập các giá trị trong một Tuple, ta sử dụng dấu ngoặc vuông []
để cắt (slicing) Tuple, cùng với chỉ số hoặc các chỉ số để lấy giá trị tại vị trí đó. Ví dụ:
mon_hoc = ('Vật lý', 'Hóa học', 1997, 2000)
so_thu_tu = (1, 2, 3, 4, 5, 6, 7)
print("Phần tử đầu tiên của mon_hoc:", mon_hoc[0])
print("Các phần tử từ 1 đến 4 của so_thu_tu:", so_thu_tu[1:5])
Kết quả khi chạy code:
Phần tử đầu tiên của mon_hoc: Vật lý
Các phần tử từ 1 đến 4 của so_thu_tu: (2, 3, 4, 5)
Giải thích:
mon_hoc = ('Vật lý', 'Hóa học', 1997, 2000)
vàso_thu_tu = (1, 2, 3, 4, 5, 6, 7)
: Khai báo hai Tuple.print("Phần tử đầu tiên của mon_hoc:", mon_hoc[0])
: Dòng này truy cập phần tử đầu tiên của Tuplemon_hoc
(chỉ số 0) và in phần tử này ra. Lưu ý, chỉ số trong Tuple bắt đầu từ 0.print("Các phần tử từ 1 đến 4 của so_thu_tu:", so_thu_tu[1:5])
: Dòng này sử dụng slicing để lấy các phần tử từ vị trí có chỉ số 1 đến chỉ số 4 (không bao gồm 5) của Tupleso_thu_tu
.
Cập nhật Tuple trong Python
Tuple là kiểu dữ liệu immutable (bất biến) trong Python. Điều này có nghĩa là bạn không thể cập nhật hoặc thay đổi giá trị của các phần tử bên trong tuple sau khi tuple đã được tạo. Tuy nhiên, bạn có thể trích xuất các phần của các tuple hiện có để tạo ra các tuple mới, như ví dụ sau minh họa:
danh_sach_mon_an_yeu_thich_1 = ("Bún chả", "Phở bò")
danh_sach_mon_an_yeu_thich_2 = ("Bánh mì", "Cơm tấm")
# Hành động sau đây không hợp lệ với tuples
# danh_sach_mon_an_yeu_thich_1[0] = "Xôi" # Gây ra lỗi
# Thay vào đó, hãy tạo một tuple mới như sau:
danh_sach_mon_an_tong_hop = danh_sach_mon_an_yeu_thich_1 + danh_sach_mon_an_yeu_thich_2
print(danh_sach_mon_an_tong_hop)
Khi thực thi đoạn mã trên, kết quả hiển thị sẽ là:
(‘Bún chả’, ‘Phở bò’, ‘Bánh mì’, ‘Cơm tấm’)
Giải thích Code:
danh_sach_mon_an_yeu_thich_1
vàdanh_sach_mon_an_yeu_thich_2
: được khởi tạo là hai tuples, mỗi tuple chứa tên các món ăn.# danh_sach_mon_an_yeu_thich_1[0] = "Bún bò Huế"
: Dòng code bị chú thích (#
) cho thấy một ví dụ về việc cố gắng thay đổi giá trị của phần tử đầu tiên trongdanh_sach_mon_an_yeu_thich_1
. Tuy nhiên, do tính chất immutable của tuple, hành động này sẽ gây ra lỗi.- Thay vì thay đổi trực tiếp: chúng ta tạo ra một tuple mới
danh_sach_mon_an_tong_hop
bằng cách sử dụng toán tử cộng (+
) để nối hai tuples ban đầu lại với nhau. print(danh_sach_mon_an_tong_hop)
: sẽ in ra tuple mới, chứa tất cả các món ăn từ cả hai danh sách ban đầu.
Xóa phần tử trong tuple
Việc loại bỏ từng phần tử riêng lẻ trong tuple là không thể thực hiện được. Tuy nhiên, bạn hoàn toàn có thể tạo một tuple mới bằng cách loại bỏ đi các phần tử không mong muốn từ tuple ban đầu.
Để xóa toàn bộ một tuple, bạn chỉ cần sử dụng câu lệnh del. Hãy xem ví dụ sau:
# Tạo một tuple
my_tuple = ('Vật lý', 'Hóa học', 1997, 2000)
print(my_tuple)
# Xóa tuple
del my_tuple
# Thử in tuple sau khi xóa
print("Sau khi xóa my_tuple:")
print(my_tuple)
Kết quả khi chạy đoạn mã trên:
(‘Vật lý’, ‘Hóa học’, 1997, 2000)
Sau khi xóa my_tuple:
Traceback (most recent call last):
File “main.py”, line 8, in
print(my_tuple)
NameError: name ‘my_tuple’ is not defined
Giải thích chi tiết:
my_tuple = ('Vật lý', 'Hóa học', 1997, 2000)
: Dòng này khởi tạo một Tuple có tên làmy_tuple
, Tuple này chứa các chuỗi và số nguyên.print(my_tuple)
: Lệnhprint
này hiển thị nội dung củamy_tuple
.del my_tuple
: Câu lệnhdel
này xóa hoàn toàn Tuplemy_tuple
khỏi bộ nhớ.print("Sau khi xóa my_tuple:")
: In một thông báo để người đọc biết Tuple vừa được xoá.print(my_tuple)
: Câu lệnhprint
này cố gắng truy cập vào Tuplemy_tuple
, nhưng vìmy_tuple
đã bị xóa ở bước trên, Python sẽ báo lỗiNameError
.NameError
chỉ ra rằng một tên biến (trong trường hợp này làmy_tuple
) không được tìm thấy (không được định nghĩa).
Lưu ý: Có một ngoại lệ (exception) được đưa ra, điều này là do sau khi thực hiện del my_tuple
, tuple không còn tồn tại nữa
Các phép toán trên tuple
Trong Python, tuple là một kiểu dữ liệu dạng chuỗi. Do đó, chúng ta có thể nối hai tuple với nhau bằng toán tử +
, và nhân bản một tuple nhiều lần bằng toán tử *
. Các toán tử kiểm tra phần tử (in
và not in
) cũng hoạt động với đối tượng tuple.
Dưới đây là bảng tóm tắt các phép toán trên Tuple và kết quả:
Biểu Thức Python | Kết Quả | Mô Tả |
(1, 2, 3) + (4, 5, 6) | (1, 2, 3, 4, 5, 6) | Nối hai Tuple. |
('Hi!',) * 4 | ('Hi!', 'Hi!', 'Hi!', 'Hi!') | Lặp lại Tuple. |
3 in (1, 2, 3) | True | Kiểm tra phần tử có tồn tại trong Tuple. |
Indexing, slicing và ma trận trong tuple
Vì tuple là kiểu dữ liệu dạng chuỗi, các thao tác indexing (truy cập phần tử theo chỉ số) và slicing (cắt/lấy một phần của chuỗi) hoạt động trên tuple tương tự như trên chuỗi.
Hãy xem xét tuple sau:
L = ('spam', 'Spam', 'SPAM!')
Dưới đây là một số biểu thức Python, kết quả và mô tả tương ứng:
Biểu Thức Python | Kết Quả | Mô Tả |
L[2] | 'SPAM!' | Chỉ số bắt đầu từ 0. |
L[-2] | 'Spam' | Chỉ số âm: đếm ngược từ cuối Tuple. |
L[1:] | ('Spam', 'SPAM!') | Slicing lấy các phần tử từ vị trí 1 đến hết. |
Không cần dấu ngăn cách rõ ràng
Một tập hợp các đối tượng, được phân tách bằng dấu phẩy, nếu không được đặt trong các ký hiệu nhận dạng (ví dụ: dấu ngoặc vuông []
cho list, dấu ngoặc tròn ()
cho tuple,…), thì mặc định sẽ được hiểu là một tuple. Hãy xem các ví dụ ngắn sau để thấy rõ điều này:
print('abc', -4.24e93, 18+6.6j, 'xyz')
x, y = 1, 2
print("Giá trị của x, y : ", x, y)
Khi thực thi đoạn code trên, kết quả hiển thị sẽ là:
(‘abc’, -4.24e+93, (18+6.6j), ‘xyz’)
Giá trị của x, y : 1 2
Giải thích chi tiết:
Dòng 1: print('abc', -4.24e93, 18+6.6j, 'xyz')
: Ở đây, ta có bốn giá trị được truyền vào hàmprint()
:'abc'
,-4.24e93
,18+6.6j
, và'xyz'
. Chúng được phân tách bằng dấu phẩy và không được đặt trong bất kỳ dấu ngoặc nào.- Do đó, Python tự động coi toàn bộ các giá trị này là một Tuple. Bạn có thể thấy điều này khi kết quả in ra, chúng được bao bởi một dấu ().
Dòng 2: x, y = 1, 2
: Đây là một cách gán giá trị cho nhiều biến cùng một lúc, gọi là “unpacking”.- Phía bên phải dấu =,
1, 2
là một Tuple gồm hai giá trị (vì chúng được phân cách bằng dấu phẩy và không có dấu ngoặc nào bao quanh). Python sẽ lần lượt “gỡ” các giá trị trong tuple này và gán cho các biếnx
vày
tương ứng. Do đó,x
sẽ có giá trị là 1, vày
sẽ có giá trị là 2. Dòng 3: print("Giá trị của x, y : ", x, y)
: Hàmprint
nhận các tham sốx
,y
tương ứng là1
,2
.
Các hàm có sẵn để dùng với tuple
Dưới đây là các hàm có sẵn mà chúng ta có thể sử dụng với Tuple:
Hàm | Mô tả |
cmp(tuple1, tuple2) | So sánh các phần tử của cả hai Tuple. (Không dùng trong Python 3) |
len(tuple) | Trả về tổng độ dài (số phần tử) của Tuple. |
max(tuple) | Trả về phần tử có giá trị lớn nhất trong Tuple. |
min(tuple) | Trả về phần tử có giá trị nhỏ nhất trong Tuple. |
tuple(seq) | Chuyển đổi một sequence (ví dụ: list) thành Tuple. |
Lời kết
Vậy là chúng ta đã cùng nhau khám phá chi tiết về kiểu dữ liệu Tuple trong Python. Từ định nghĩa cơ bản, cách truy cập, cập nhật (một cách gián tiếp), xóa phần tử, các phép toán, indexing, slicing đến những hàm hỗ trợ sẵn có. Hy vọng bài viết này sẽ cung cấp cho bạn một cái nhìn tổng quan và hữu ích về Tuple, giúp bạn áp dụng hiệu quả hơn vào các dự án Python của mình.
Mọi người cũng đọc