Chương 3: Bộ Sưu Tập Dữ Liệu – List và Tuple

Ở chương trước, chúng ta đã học cách dùng biến để lưu trữ một mẩu thông tin, như ten = "An" hay tuoi = 20. Nhưng nếu bạn muốn lưu một danh sách các món ăn yêu thích, hay tên của tất cả học sinh trong lớp thì sao? Việc tạo ra mon_an_1, mon_an_2, mon_an_3… là rất thiếu hiệu quả.

Đây là lúc các “bộ sưu tập” dữ liệu tỏa sáng. Trong chương này, chúng ta sẽ học về hai “bộ sưu tập” phổ biến nhất trong Python: ListTuple.

Giới thiệu về List: “Chiếc Rương” Chứa Nhiều Món Đồ

Hãy tưởng tượng List như một chiếc rương có nhiều ngăn kéo được đánh số. Bạn có thể chứa bất kỳ món đồ nào vào mỗi ngăn, và có thể tự do thêm, bớt, hoặc thay đổi các món đồ bên trong.

1. Cách tạo một List:

Một List được tạo ra bằng cách đặt các giá trị bên trong cặp ngoặc vuông [], mỗi giá trị cách nhau

Python

# Một list chứa các chuỗi (str)
cac_mon_an = ["Phở", "Bún chả", "Nem rán"]

# Một list chứa các số nguyên (int)
diem_thi = [8, 10, 7, 9, 8]

# Một list có thể chứa nhiều kiểu dữ liệu khác nhau
thong_tin_ca_nhan = ["Nguyễn Văn An", 25, True] 

# Một list rỗng
to_do_list = []

print(cac_mon_an)

2. Truy cập phần tử (Indexing):

Để lấy một món đồ ra khỏi “ngăn kéo”, chúng ta dùng chỉ số (index) của nó. Lưu ý quan trọng: Trong Python, việc đếm luôn bắt đầu từ số 0.

  • Phần tử đầu tiên có index là 0.
  • Phần tử thứ hai có index là 1.
  • …và cứ thế tiếp tục.
Python

cac_mon_an = ["Phở", "Bún chả", "Nem rán"]

mon_dau_tien = cac_mon_an[0]  # Lấy phần tử ở index 0
print(mon_dau_tien)          # Kết quả: Phở

mon_thu_ba = cac_mon_an[2]   # Lấy phần tử ở index 2
print(mon_thu_ba)            # Kết quả: Nem rán

Python còn hỗ trợ index âm để truy cập từ cuối danh sách lên:

  • cac_mon_an[-1] sẽ lấy phần tử cuối cùng.
  • cac_mon_an[-2] sẽ lấy phần tử gần cuối.

3. Thêm, Sửa, Xóa phần tử:

Điểm mạnh nhất của List là nó rất linh hoạt, hay còn gọi là mutable (có thể thay đổi).

  • Sửa (Modify): Thay đổi giá trị tại một index cụ thể.

    Python

    cac_mon_an[1] = "Bún đậu mắm tôm"
    print(cac_mon_an)  # Kết quả: ['Phở', 'Bún đậu mắm tôm', 'Nem rán']
    
  • Thêm (Add):

    • Dùng .append() để thêm một phần tử vào cuối list.
      Python

      cac_mon_an.append("Chả cá Lã Vọng")
      print(cac_mon_an) # Kết quả: ['Phở', 'Bún đậu mắm tôm', 'Nem rán', 'Chả cá Lã Vọng']
      
    • Dùng .insert() để chèn một phần tử vào một vị trí (index) cụ thể.
      Python

      cac_mon_an.insert(1, "Bánh mì")
      print(cac_mon_an) # Kết quả: ['Phở', 'Bánh mì', 'Bún đậu mắm tôm', 'Nem rán', 'Chả cá Lã Vọng']
      
  • Xóa (Remove):

    • Dùng del nếu bạn biết index của phần tử muốn xóa.
      Python

      del cac_mon_an[0]  # Xóa "Phở"
      print(cac_mon_an)
      
    • Dùng .remove() nếu bạn biết giá trị của phần tử muốn xóa (nó sẽ xóa phần tử đầu tiên nó tìm thấy).
      Python

      cac_mon_an.remove("Nem rán")
      print(cac_mon_an)
      

Giới thiệu về Tuple: “Chiếc Hộp” Bị Niêm Phong

Tuple cũng là một bộ sưu tập các phần tử, tương tự như List. Tuy nhiên, nó có một khác biệt cốt lõi: Tuple là immutable (bất biến, không thể thay đổi).

Hãy nghĩ về Tuple như một chiếc hộp trong suốt đã được niêm phong. Bạn có thể nhìn thấy mọi thứ bên trong, nhưng không thể thay đổi, thêm vào, hay lấy bớt đi bất cứ thứ gì.

1. Cách tạo một Tuple:

Một Tuple được tạo bằng cặp ngoặc tròn ().

Python

# Một tuple chứa tọa độ không đổi
toa_do_diem_A = (10, 20)

# Một tuple chứa các ngày trong tuần
ngay_trong_tuan = ("Thứ Hai", "Thứ Ba", "Thứ Tư")

Bạn vẫn có thể truy cập các phần tử của Tuple bằng index, y hệt như List:

Python

print(toa_do_diem_A[0])  # Kết quả: 10

2. Sự khác biệt mấu chốt:

Nếu bạn cố gắng thay đổi một phần tử trong Tuple, Python sẽ báo lỗi ngay lập tức.

Python

# DÒNG CODE DƯỚI ĐÂY SẼ GÂY LỖI!
# toa_do_diem_A[0] = 15  # TypeError: 'tuple' object does not support item assignment

Khi nào nên dùng List? Khi nào nên dùng Tuple?

  • Dùng List khi bạn có một danh sách các mục có thể thay đổi theo thời gian (ví dụ: danh sách mua sắm, danh sách người chơi trong game).
  • Dùng Tuple khi bạn có một bộ dữ liệu mà bạn biết chắc chắn sẽ không và không nên thay đổi (ví dụ: tọa độ GPS, bộ ba màu RGB, thông tin cấu hình cố định). Việc này giúp code của bạn an toàn hơn.

Một Vài Phương Thức Hữu Ích Của List

Dưới đây là một vài công cụ hữu ích khác khi làm việc với List:

  • len(ten_list): Trả về số lượng phần tử có trong list.
    Python

    so_mon_an = len(cac_mon_an)
    print("Có tổng cộng", so_mon_an, "món ăn.")
    
  • .sort(): Sắp xếp các phần tử trong list (thay đổi list gốc).
    Python

    diem_thi = [8, 10, 7, 9, 8]
    diem_thi.sort()  # Sắp xếp tăng dần
    print(diem_thi)   # Kết quả: [7, 8, 8, 9, 10]
    
  • .reverse(): Đảo ngược thứ tự các phần tử (thay đổi list gốc).
    Python

    diem_thi.reverse()
    print(diem_thi)   # Kết quả: [10, 9, 8, 8, 7]
    

🎯 Tổng kết chương 3

Qua chương này, bạn đã được trang bị hai công cụ cực kỳ mạnh mẽ để quản lý dữ liệu:

  • List ([]): Linh hoạt, có thể thay đổi. Giống như một danh sách công việc hàng ngày.
  • Tuple (()): Cố định, không thể thay đổi. Giống như ngày tháng năm sinh của bạn.

Bây giờ bạn không chỉ có thể lưu trữ các giá trị đơn lẻ, mà còn có thể quản lý cả một bộ sưu tập dữ liệu. Ở chương tiếp theo, chúng ta sẽ học cách “dạy” cho máy tính tự đưa ra quyết định dựa trên những dữ liệu này. Hãy sẵn sàng để bước vào thế giới của logic!