Python – Module 6 – Ba lô nhà thám hiểm (Lists & Collections) 🎒
Cho đến giờ, chúng ta chỉ lưu một thứ tại một thời điểm trong các biến ma thuật. Nếu muốn theo dõi nhiều vật phẩm cùng lúc, sẽ cần hàng tá biến riêng biệt!

Trong lập trình, chúng ta giải quyết vấn đề này bằng cách nhóm mọi thứ lại với nhau. Những nhóm dữ liệu được gọi chung là Collections (Loại tập hợp). Có nhiều dạng collection khác nhau – mỗi loại phù hợp cho một mục đích khác nhau trong game!
1. Lists – Danh sách có thứ tự
List là một biến chứa một tập hợp các item có thứ tự xác định. Hãy tưởng tượng nó như một cái ba lô – bạn đặt đồ vào, và chúng nằm ở vị trí cụ thể. Tạo list bằng dấu ngoặc vuông [].
Ví dụ: Tạo ba lô đồ

Kết quả:

Một list có thể chứa bất kỳ kiểu dữ liệu nào – string, số, boolean, thậm chí là các list khác!
2. Index – Lấy từng item ra từ List
Mỗi item trong list đều có một vị trí (index) bắt đầu từ 0. Máy tính đếm từ 0, không phải từ 1!
Ví dụ: Chọn trang bị

Truy xuất ngược với index âm
Python cho phép đếm từ cuối list trở về đầu bằng số âm! -1 là item cuối cùng.

Slicing – Cắt – đoạn của List
Bạn có thể trích xuất một đoạn liên tiếp từ list dùng cú pháp [start:stop].
Lưu ý: phần tử tại stop không được bao gồm trong kết quả.

3. Thêm và Xóa item trong List
Khi giết quái vật và nhặt được quà, bạn cần thêm chúng vào ba lô. Khi dùng hết thuốc, bạn cần xóa chúng đi!
.append() — Thêm vào cuối list

.remove() — Xóa item cụ thể

⚠️ Lưu ý: Nếu item không tồn tại trong list, .remove() sẽ báo lỗi!
.pop() — Lấy và xóa item tại vị trí
.pop() không chỉ xóa mà còn trả về item bị xóa — cực hữu ích để xử lý lượt chơi!

Có thể gọi .pop() không đối số để lấy item cuối cùng:

len() — Độ dài của List
Muốn biết có bao nhiêu item trong túi? Dùng len()!

Mẹo thực chiến: Kiểm tra xem danh sách rỗng chưa:

Sửa item trực tiếp bằng index
Bạn có thể thay đổi giá trị của một vị trí cụ thể:

4. Nối và Nhân List
Hai toán tử đặc biệt giúp làm việc với list dễ dàng hơn!
Nối list bằng +

Lặp lại list bằng *

5. Duyệt List với vòng lặp
Khi có nhiều item, thay vì truy cập từng index, hãy dùng for … in:
Duyệt từng item

Kết quả:

Filter items dựa trên điều kiện

List comprehension – Tạo list nhanh gọn
Python cho phép tạo list mới từ một list có sẵn bằng cú pháp ngắn gọn:

6. Sắp xếp List
.sort() sắp xếp các item theo thứ tự alphabet hoặc tăng dần:

Sắp xếp giảm dần với tham số reverse=True:

7. Tuples — List bất biến
Tuple giống hệt List nhưng không thể sửa đổi sau khi tạo. Dùng dấu ngoặc tròn () thay vì vuông [].
Ví dụ: Cấu hình cố định của game

Tại sao dùng Tuple thay vì List?

Tuple dùng khi dữ liệu phải giữ nguyên – như màu sắc hay tọa độ. Python xử lý tuple nhanh hơn và an toàn hơn vì không ai vô tình thay đổi được!
8. Sets – Tập hợp không trùng lặp
Set là collection không có thứ tự và không cho phép item trùng lặp. Dùng dấu ngoặc {} hoặc hàm set().
Ví dụ: Loại bỏ item trùng trong loot

Toán tử Set – Union, Intersection, Difference
Sets rất mạnh khi so sánh hai tập hợp – ví dụ: kiểm tra overlap giữa kỹ năng của hai nhân vật!

Thêm/xóa item trong Set

9. Dictionaries – Bảng dữ liệu khóa – giá trị
Dictionary (Dict) lưu trữ dữ liệu dạng key: value. Khác với list dùng index số, dict dùng tên khóa để lấy giá trị. Tạo bằng {}.
Ví dụ: Hồ sơ nhân vật hoàn chỉnh

Thêm và sửa key-value

Duyệt Dictionary

Kết quả:

Dữ liệu lồng nhau – Dict trong List

Kết quả:

10. Queues (Deques) – Hàng đợi ưu tiên
Queue hoạt động theo nguyên tắc FIFO (First In, First Out) – người đến trước phục vụ trước. Trong Python, chúng ta dùng collections.deque để tạo queue hiệu quả.
Ví dụ: Hàng chờ lượt trong combat

So sánh với List

Deque tối ưu khi bạn thường xuyên thêm/xóa ở cả hai đầu!
Ví dụ: Hệ thống undo (hoàn tác hành động)

11. Thực Hành Tích Hợp ⚔️
Nhiệm vụ 1: Zombie Survival Kit (List)
Một đại dịch zombie đang diễn ra! Bạn có 5 giây để chạy qua nhà và nhặt 5 vật phẩm.

Nhiệm vụ 2: Ranking System (List + Sort)
Hệ thống bảng xếp hạng tournament – sắp xếp điểm số giảm dần và tặng huy chương!

Nhiệm vụ 3: Potion Recipe Book (Dict)
Xây dựng một cuốn sổ công thức pha potion:

🏆 Thử thách cuối: Hãy viết một hàm nhỏ kiểm tra xem ingredient nào có trong tất cả các công thức!
12. Bảng Tổng Kết Collections
| Collection | Cú pháp | Thứ tự | Trùng lặp | Sửa đổi | Khi nào dùng |
|---|---|---|---|---|---|
| List | [] | ✅ Có | ✅ Cho phép | ✅ Thêm/xóa/sửa | Ba lô, danh sách kẻ địch, leaderboard |
| Tuple | () | ✅ Có | ✅ Cho phép | ❌ Bất biến | Tọa độ, cấu hình cố định, team lineup |
| Set | {} | ❌ Không | ❌ Duy nhất | ✅ Thêm/xóa | Loại bỏ trùng, so sánh overlaps |
| Dict | {k:v} | ✅ (Py3.7+) | Keys: unik | ✅ Thêm/sửa | Hồ sơ nhân vật, config, lookup tables |
| Deque | deque() | ✅ Có | ✅ Cho phép | ✅ Hai đầu | Hàng đợi lượt, undo history |
13. Tổng kết Module
- List [] — collection có thứ tự, sửa đổi được. Methods phổ biến: .append(), .remove(), .pop(), .sort(), len()
- Tuple () — giống list nhưng bất biến, dùng cho dữ liệu cố định
- Set {} — collection không trùng lặp, hỗ trợ union/intersection/difference
- Dictionary {k:v} — lưu dữ liệu theo khóa-giá trị, truy cập nhanh bằng tên khóa
- Deque — queue/deck hiệu quả, thao tác ở cả hai đầu với O(1)
- List comprehension — cách Pythonic để tạo list mới từ list cũ
- Tất cả collections đều duyệt được bằng vòng lặp for
Bạn đã sẵn sàng cho cấp độ tiếp theo? Trong Module 7, chúng ta sẽ học cách xây dựng Functions (Hàm) — những khối code reusable, giống như các skill template mà bạn có thể cast lại nhiều lần! ⚡
(Continue)

vuanhduc2685@gmail.com
hoanvtt99@gmail.com
