Tuple
1. Tuple là gì?
Phần tiêu đề “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
Phần tiêu đề “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 đổimy_list = [1, 2, 3]my_list[0] = 10 # OKmy_list.append(4) # OK
# Tuple - Không thể thay đổimy_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
Phần tiêu đề “3. Cách tạo Tuple”Tạo tuple bằng cặp ngoặc tròn ()
Phần tiêu đề “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
Phần tiêu đề “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ần tiêu đề “Tạo tuple có 1 phần tử”# Phải có dấu phẩy sau phần tử duy nhấtsingle = (5,) # Đây là tupleprint(type(single)) # <class 'tuple'>
# Không có dấu phẩy thì KHÔNG phải tuplenot_tuple = (5) # Đây chỉ là số 5print(type(not_tuple)) # <class 'int'>Tạo tuple rỗng
Phần tiêu đề “Tạo tuple rỗng”empty_tuple = ()another_empty = tuple()Tạo tuple từ list
Phần tiêu đề “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
Phần tiêu đề “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
Phần tiêu đề “4. Các thao tác cơ bản với Tuple”Lấy độ dài của tuple
Phần tiêu đề “Lấy độ dài của tuple”fruits = ("apple", "banana", "orange", "mango")print(len(fruits)) # 4Truy cập phần tử theo index
Phần tiêu đề “Truy 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)
Phần tiêu đề “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 2print(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
Phần tiêu đề “Kiể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
Phần tiêu đề “Nối tuple”tuple1 = (1, 2, 3)tuple2 = (4, 5, 6)result = tuple1 + tuple2print(result) # (1, 2, 3, 4, 5, 6)Lặp tuple
Phần tiêu đề “Lặp tuple”colors = ("red", "blue", "green")repeated = colors * 3print(repeated)# ("red", "blue", "green", "red", "blue", "green", "red", "blue", "green")5. Các phương thức của Tuple
Phần tiêu đề “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
Phần tiêu đề “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ử
Phần tiêu đề “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
Phần tiêu đề “6. Duyệt Tuple bằng vòng lặp”Duyệt qua từng phần tử
Phần tiêu đề “Duyệt qua từng phần tử”fruits = ("apple", "banana", "orange")
for fruit in fruits: print(fruit)# apple# banana# orangeDuyệt theo index
Phần tiêu đề “Duyệ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
Phần tiêu đề “Duyệ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
Phần tiêu đề “7. 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
Phần tiêu đề “Unpacking cơ bản”coordinates = (10, 20)x, y = coordinates
print(x) # 10print(y) # 20Unpacking với nhiều giá trị
Phần tiêu đề “Unpacking với nhiều giá trị”student = ("Minh Anh", 11, "5A")name, age, class_name = student
print(name) # "Minh Anh"print(age) # 11print(class_name) # "5A"Unpacking với dấu *
Phần tiêu đề “Unpacking với dấu *”numbers = (1, 2, 3, 4, 5, 6)first, *middle, last = numbers
print(first) # 1print(middle) # [2, 3, 4, 5]print(last) # 6Hoán đổi giá trị bằng Tuple
Phần tiêu đề “Hoán đổi giá trị bằng Tuple”a = 5b = 10
# Hoán đổi không cần biến tạma, b = b, a
print(a) # 10print(b) # 58. Khi nào nên dùng Tuple?
Phần tiêu đề “8. 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
Phần tiêu đề “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ậpprint(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
Phần tiêu đề “10. Chuyển đổi giữa Tuple và List”Tuple sang List
Phần tiêu đề “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 đổimy_list.append(5)print(my_list) # [1, 2, 3, 4, 5]List sang Tuple
Phần tiêu đề “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
Phần tiêu đề ““Thay đổi” Tuple bằng cách chuyển đổi”# Tuple ban đầufruits = ("apple", "banana")
# Chuyển sang list, thay đổi, rồi chuyển lại tupletemp_list = list(fruits)temp_list.append("orange")fruits = tuple(temp_list)
print(fruits) # ("apple", "banana", "orange")Bài giảng trên YouTube
Phần tiêu đề “Bài giảng trên YouTube”📝 Bài tập thực hành
Phần tiêu đề “📝 Bài tập thực hành”Sau khi học xong bài này, hãy thực hành với các bài tập sau: