Tuple
1. Tuple là gì?
Tuple là một cấu trúc dữ liệu cho phép chứa nhiều giá trị theo thứ tự, giống như List. Tuy nhiên, có một điểm khác biệt quan trọng: Tuple không thể thay đổi (immutable) sau khi đã tạo.
Đặc điểm của Tuple:
- Có thứ tự: Các phần tử được sắp xếp theo thứ tự
- Không thể thay đổi (immutable): Không thể thêm, xoá, hoặc sửa phần tử
- Có thể chứa nhiều kiểu dữ liệu: Số, chuỗi, boolean, v.v.
- Cho phép trùng lặp: Có thể có nhiều phần tử giống nhau
Ví dụ tuple hợp lệ:
numbers = (1, 2, 3, 4, 5)
coordinates = (10.5, 20.3)
mixed = (1, "hello", True, 3.14)
fruits = ("apple", "banana", "orange")2. Sự khác biệt giữa Tuple và List
| Đặc điểm | List | Tuple |
|---|---|---|
| Ký hiệu | Ngoặc vuông [] | Ngoặc tròn () |
| Có thể thay đổi | Có (mutable) | Không (immutable) |
| Tốc độ | Chậm hơn | Nhanh hơn |
| Sử dụng bộ nhớ | Nhiều hơn | Ít hơn |
| Dùng khi nào | Dữ liệu cần thay đổi | Dữ liệu cố định |
Ví dụ:
# List - Có thể thay đổi
my_list = [1, 2, 3]
my_list[0] = 10 # OK
my_list.append(4) # OK
# Tuple - Không thể thay đổi
my_tuple = (1, 2, 3)
# my_tuple[0] = 10 # LỖI! Không thể thay đổi
# my_tuple.append(4) # LỖI! Không có phương thức append3. Cách tạo Tuple
Tạo tuple bằng cặp ngoặc tròn ()
fruits = ("apple", "banana", "orange")
numbers = (1, 2, 3, 4, 5)
coordinates = (10.5, 20.3, 15.7)Tạo tuple không cần ngoặc tròn
fruits = "apple", "banana", "orange" # Vẫn là tuple!
numbers = 1, 2, 3, 4, 5Tạo tuple có 1 phần tử
# Phải có dấu phẩy sau phần tử duy nhất
single = (5,) # Đây là tuple
print(type(single)) # <class 'tuple'>
# Không có dấu phẩy thì KHÔNG phải tuple
not_tuple = (5) # Đây chỉ là số 5
print(type(not_tuple)) # <class 'int'>Tạo tuple rỗng
empty_tuple = ()
another_empty = tuple()Tạo tuple từ list
my_list = [1, 2, 3, 4]
my_tuple = tuple(my_list)
print(my_tuple) # (1, 2, 3, 4)Tạo tuple từ chuỗi
text = "Python"
char_tuple = tuple(text)
print(char_tuple) # ('P', 'y', 't', 'h', 'o', 'n')4. Các thao tác cơ bản với Tuple
Lấy độ dài của tuple
fruits = ("apple", "banana", "orange", "mango")
print(len(fruits)) # 4Truy cập phần tử theo index
fruits = ("apple", "banana", "orange", "mango")
print(fruits[0]) # "apple"
print(fruits[1]) # "banana"
print(fruits[-1]) # "mango" (phần tử cuối)
print(fruits[-2]) # "orange" (phần tử áp cuối)Slicing (cắt tuple)
numbers = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
print(numbers[2:5]) # (2, 3, 4)
print(numbers[:4]) # (0, 1, 2, 3)
print(numbers[5:]) # (5, 6, 7, 8, 9)
print(numbers[::2]) # (0, 2, 4, 6, 8) - bước nhảy 2
print(numbers[::-1]) # (9, 8, 7, 6, 5, 4, 3, 2, 1, 0) - đảo ngượcKiểm tra phần tử có trong tuple không
fruits = ("apple", "banana", "orange")
if "apple" in fruits:
print("Có táo!")
if "mango" not in fruits:
print("Không có xoài")Nối tuple
tuple1 = (1, 2, 3)
tuple2 = (4, 5, 6)
result = tuple1 + tuple2
print(result) # (1, 2, 3, 4, 5, 6)Lặp tuple
colors = ("red", "blue", "green")
repeated = colors * 3
print(repeated)
# ("red", "blue", "green", "red", "blue", "green", "red", "blue", "green")5. Các phương thức của Tuple
Tuple chỉ có 2 phương thức vì nó không thể thay đổi:
| Phương thức | Chức năng | Ví dụ |
|---|---|---|
count(x) | Đếm số lần xuất hiện của x | my_tuple.count(5) |
index(x) | Tìm vị trí đầu tiên của x | my_tuple.index(5) |
5.1 - count(x): Đếm số lần xuất hiện
numbers = (1, 2, 3, 2, 4, 2, 5, 2)
count = numbers.count(2)
print(count) # 4 (số 2 xuất hiện 4 lần)5.2 - index(x): Tìm vị trí của phần tử
fruits = ("apple", "banana", "orange", "mango")
position = fruits.index("orange")
print(position) # 2Nếu phần tử không tồn tại sẽ báo lỗi:
fruits = ("apple", "banana", "orange")
# position = fruits.index("grape") # LỖI! ValueError6. Duyệt Tuple bằng vòng lặp
Duyệt qua từng phần tử
fruits = ("apple", "banana", "orange")
for fruit in fruits:
print(fruit)
# apple
# banana
# orangeDuyệt theo index
fruits = ("apple", "banana", "orange")
for i in range(len(fruits)):
print(f"Index {i}: {fruits[i]}")
# Index 0: apple
# Index 1: banana
# Index 2: orangeDuyệt với enumerate
fruits = ("apple", "banana", "orange")
for index, fruit in enumerate(fruits):
print(f"{index}: {fruit}")
# 0: apple
# 1: banana
# 2: orange7. Unpacking Tuple
Unpacking là cách "mở gói" tuple để gán các giá trị cho nhiều biến.
Unpacking cơ bản
coordinates = (10, 20)
x, y = coordinates
print(x) # 10
print(y) # 20Unpacking với nhiều giá trị
student = ("Minh Anh", 11, "5A")
name, age, class_name = student
print(name) # "Minh Anh"
print(age) # 11
print(class_name) # "5A"Unpacking với dấu *
numbers = (1, 2, 3, 4, 5, 6)
first, *middle, last = numbers
print(first) # 1
print(middle) # [2, 3, 4, 5]
print(last) # 6Hoán đổi giá trị bằng Tuple
a = 5
b = 10
# Hoán đổi không cần biến tạm
a, b = b, a
print(a) # 10
print(b) # 58. Khi nào nên dùng Tuple?
Nên dùng Tuple khi:
-
Dữ liệu không cần thay đổi: Như toạ độ, ngày tháng, thông tin cố định
birthday = (25, 12, 2015) # Ngày sinh không đổi -
Muốn bảo vệ dữ liệu: Không cho phép thay đổi vô tình
DAYS_IN_WEEK = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") -
Làm key cho dictionary: List không thể làm key, nhưng tuple có thể
locations = { (0, 0): "Start", (10, 5): "Checkpoint", (20, 10): "End" } -
Return nhiều giá trị từ hàm:
def get_student_info(): return "Tuệ Nghi", 11, "5A" name, age, class_name = get_student_info() -
Tiết kiệm bộ nhớ và nhanh hơn: Tuple tốn ít bộ nhớ hơn List
Nên dùng List khi: Dữ liệu cần thêm, xoá, sửa thường xuyên
9. Tuple lồng nhau
Tuple có thể chứa tuple khác bên trong:
students = (
("Minh Sang", 10, "5A"),
("Phước Sâm", 11, "5B"),
("Bảo Nguyên", 10, "5A")
)
# Truy cập
print(students[0]) # ("Minh Sang", 10, "5A")
print(students[0][0]) # "Minh Sang"
print(students[1][2]) # "5B"10. Chuyển đổi giữa Tuple và List
Tuple sang List
my_tuple = (1, 2, 3, 4)
my_list = list(my_tuple)
print(my_list) # [1, 2, 3, 4]
# Bây giờ có thể thay đổi
my_list.append(5)
print(my_list) # [1, 2, 3, 4, 5]List sang Tuple
my_list = [1, 2, 3, 4]
my_tuple = tuple(my_list)
print(my_tuple) # (1, 2, 3, 4)"Thay đổi" Tuple bằng cách chuyển đổi
# Tuple ban đầu
fruits = ("apple", "banana")
# Chuyển sang list, thay đổi, rồi chuyển lại tuple
temp_list = list(fruits)
temp_list.append("orange")
fruits = tuple(temp_list)
print(fruits) # ("apple", "banana", "orange")Bài giảng trên YouTube
Cập nhật sau