
Chào các "coder nhí" tương lai của vũ trụ số, anh Creyt đây! Hôm nay, chúng ta sẽ "bóc phốt" một trong những "influencer" quyền lực nhất trong thế giới Python: list. Nghe tên có vẻ "nhạt", nhưng tin anh đi, nó là "chân ái" cho mọi dự án của Gen Z chúng ta!
1. List là gì mà "hot" dữ vậy?
Để dễ hình dung, em cứ tưởng tượng list trong Python giống như cái playlist Spotify của em vậy. Nó là một tập hợp có thứ tự (ordered collection) của các bài hát (mà ở đây là các "phần tử" - elements). Và quan trọng hơn, nó có thể thay đổi (mutable) – em có thể thêm bài mới, xóa bài cũ, hay thay đổi thứ tự bài hát bất cứ lúc nào, đúng không? Đó chính là list!
- Ordered (Có thứ tự): Vị trí của mỗi bài hát (phần tử) trong playlist rất quan trọng. "Shape of You" ở vị trí số 1 là khác với ở vị trí số 5.
- Mutable (Có thể thay đổi): Em có thể "edit" playlist của mình thoải mái. Thêm, bớt, sửa, sắp xếp lại –
listcho phép tất cả. - Chứa đủ thứ "trên đời": Trong một playlist, em có thể có bài pop, rock, rap...
listcũng vậy, nó có thể chứa số, chữ, boolean, thậm chí là cả cáclistkhác bên trong!
2. "Setup" List của bạn: Cách tạo playlist
Để tạo một list, đơn giản nhất là dùng cặp ngoặc vuông [].
# Một playlist mới tinh, chưa có bài nào (list rỗng)
playlist_moi = []
print(f"Playlist mới: {playlist_moi}")
# Playlist với vài bài hit "đỉnh của chóp"
playlist_hits = ["Shape of You", "Blinding Lights", "Levitating"]
print(f"Playlist hits: {playlist_hits}")
# List đa thể loại, như một bữa tiệc âm nhạc không biên giới
thong_tin_sinh_vien = ["Creyt", 2000, True, 8.5] # Tên, năm sinh, có phải sinh viên không, điểm trung bình
print(f"Thông tin sinh viên: {thong_tin_sinh_vien}")
3. "Nghe nhạc" chọn lọc: Truy cập phần tử trong List
Muốn nghe một bài hát cụ thể? Em dùng chỉ số (index). Nhớ nhé, Python đếm từ 0!
playlist_hits = ["Shape of You", "Blinding Lights", "Levitating", "Bad Habits"]
# Bài đầu tiên (index 0)
print(f"Bài đầu tiên: {playlist_hits[0]}") # Output: Shape of You
# Bài cuối cùng (dùng index âm, -1 là cuối cùng, -2 là kế cuối...)
print(f"Bài cuối cùng: {playlist_hits[-1]}") # Output: Bad Habits
# "Top hit" đầu tiên (từ index 0 đến trước index 2)
print(f"Top 2: {playlist_hits[0:2]}") # Output: ['Shape of You', 'Blinding Lights']
print(f"Top 2 (cách ngắn gọn): {playlist_hits[:2]}") # Output: ['Shape of You', 'Blinding Lights']
# Từ bài thứ hai đến hết (từ index 1 trở đi)
print(f"Từ bài thứ 2 đến hết: {playlist_hits[1:]}") # Output: ['Blinding Lights', 'Levitating', 'Bad Habits']
4. "DJ" chuyên nghiệp: Sửa đổi List (Thêm, bớt, đổi bài)
Đây là lúc em thể hiện kỹ năng "mix nhạc" của mình. list có nhiều phương thức giúp em làm điều này.
playlist_cua_creyt = ["Bài hát buồn", "Bài hát vui"]
# Thêm bài mới vào cuối playlist (append)
playlist_cua_creyt.append("Bài hát chill")
print(f"Sau append: {playlist_cua_creyt}") # Output: ['Bài hát buồn', 'Bài hát vui', 'Bài hát chill']
# Chèn bài "Hit mới" vào vị trí số 1 (insert)
playlist_cua_creyt.insert(1, "Hit mới của Creyt")
print(f"Sau insert: {playlist_cua_creyt}") # Output: ['Bài hát buồn', 'Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill']
# Nối thêm một playlist khác (extend)
playlist_moi_ra = ["Bài EDM", "Bài Ballad"]
playlist_cua_creyt.extend(playlist_moi_ra)
print(f"Sau extend: {playlist_cua_creyt}") # Output: ['Bài hát buồn', 'Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill', 'Bài EDM', 'Bài Ballad']
# Sửa tên bài hát ở index 0 (gán lại giá trị)
playlist_cua_creyt[0] = "Bài hát cực buồn"
print(f"Sau sửa: {playlist_cua_creyt}") # Output: ['Bài hát cực buồn', 'Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill', 'Bài EDM', 'Bài Ballad']
# Xóa "Bài EDM" theo tên (remove)
playlist_cua_creyt.remove("Bài EDM")
print(f"Sau remove: {playlist_cua_creyt}") # Output: ['Bài hát cực buồn', 'Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill', 'Bài Ballad']
# Xóa bài ở vị trí cuối cùng và lấy ra bài đó (pop)
bai_bi_xoa = playlist_cua_creyt.pop()
print(f"Bài bị xóa bằng pop: {bai_bi_xoa}") # Output: Bài Ballad
print(f"Sau pop: {playlist_cua_creyt}") # Output: ['Bài hát cực buồn', 'Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill']
# Xóa bài ở vị trí 0 bằng del (xóa vĩnh viễn không trả về)
del playlist_cua_creyt[0]
print(f"Sau del: {playlist_cua_creyt}") # Output: ['Hit mới của Creyt', 'Bài hát vui', 'Bài hát chill']
# Xóa sạch sành sanh cả playlist (clear)
playlist_cua_creyt.clear()
print(f"Sau clear: {playlist_cua_creyt}") # Output: []

5. "Marathon" nghe nhạc: Lặp qua List
Để nghe lần lượt từng bài hát trong playlist, em dùng vòng lặp for thần thánh.
phim_phai_xem = ["Dune", "Interstellar", "Inception"]
print("Danh sách phim cần xem:")
for phim in phim_phai_xem:
print(f"- {phim}")
# Nếu em muốn biết cả số thứ tự của phim nữa, dùng enumerate() là "chuẩn bài"
print("\nDanh sách phim kèm số thứ tự:")
for i, phim in enumerate(phim_phai_xem):
print(f"{i+1}. {phim}") # i bắt đầu từ 0, nên cộng 1 cho dễ nhìn
6. "Hack" List: List Comprehension (Tạo list "chill" hơn)
Đây là một tính năng cực kỳ "Pythonic" và "cool ngầu" mà Gen Z chắc chắn sẽ thích. Nó giúp em tạo ra một list mới từ một list (hoặc một dãy số) khác một cách ngắn gọn và hiệu quả.
# Tạo list bình phương các số từ 0 đến 4 (như một phép thuật)
binh_phuong = [x**2 for x in range(5)]
print(f"Bình phương: {binh_phuong}") # Output: [0, 1, 4, 9, 16]
# Lọc các số chẵn từ 0 đến 9 (chỉ lấy những bài hit)
so_chan = [x for x in range(10) if x % 2 == 0]
print(f"Số chẵn: {so_chan}") # Output: [0, 2, 4, 6, 8]
7. Mẹo hay & Best Practices từ "Giảng viên Creyt"
- Mutability là con dao hai lưỡi:
listcó thể thay đổi, tiện lợi thật đấy, nhưng cũng dễ gây ra lỗi nếu em không hiểu rõ về tham chiếu (reference). Khi em gánlist_copy = list_goc, em không tạo ra một bản sao độc lập, mà là cả hai biến cùng trỏ về mộtlisttrong bộ nhớ. Sửalist_copythìlist_goccũng bị ảnh hưởng.list_goc = [1, 2, 3] list_copy_tham_chieu = list_goc # Cả hai biến cùng trỏ về một list list_copy_tham_chieu[0] = 99 print(f"List gốc sau khi sửa copy tham chiếu: {list_goc}") # Output: [99, 2, 3] (bị thay đổi!) # Cách copy "đúng bài" để tạo bản sao độc lập: list_copy_doc_lap = list_goc[:] # Dùng slicing để tạo bản sao nông (shallow copy) # Hoặc dùng phương thức .copy() list_copy_doc_lap_2 = list_goc.copy() list_copy_doc_lap[0] = 100 print(f"List gốc sau khi sửa copy độc lập: {list_goc}") # Output: [99, 2, 3] (không bị ảnh hưởng bởi list_copy_doc_lap) - Dùng
enumerate()khi cần index: Thay vìfor i in range(len(my_list)): item = my_list[i], hãy dùngfor i, item in enumerate(my_list):. Code sẽ gọn gàng và dễ đọc hơn nhiều. - List Comprehension: Luôn là lựa chọn số 1 khi em cần tạo một
listmới dựa trên logic nào đó. Nó không chỉ giúp code ngắn gọn mà còn thường chạy nhanh hơn các vòng lặpfortruyền thống. - Khi nào dùng
tuple? Nếu em có một tập hợp dữ liệu mà không muốn nó bị thay đổi (immutable), hãy nghĩ đếntuple. Ví dụ: tọa độ(x, y), thông tin cá nhân("Creyt", 2000).tuplenhanh hơnlistmột chút và an toàn hơn khi em muốn đảm bảo dữ liệu không bị sửa đổi ngoài ý muốn.
8. List ở đâu trong "hệ sinh thái" Gen Z?
list có mặt khắp mọi nơi mà em không ngờ tới:
- TikTok/Instagram Feed: Mỗi video/bài post em lướt qua trên "For You" page hay feed của mình, thực chất là một phần tử trong một
listlớn được thuật toán cá nhân hóa riêng cho em. - Game Inventory: Các vật phẩm em thu thập được trong game (kiếm, giáp, potion, skin...) thường được lưu trữ trong một
listtrong "hành trang" của nhân vật. - To-Do List Apps: Danh sách công việc cần làm hàng ngày của em? Chính là một
listđó! - Shopping Cart (Giỏ hàng online): Mỗi món đồ em thêm vào giỏ hàng trên Shopee, Tiki đều nằm trong một
listcác sản phẩm. - Lịch sử duyệt web: Danh sách các trang web em đã truy cập.
9. Thử nghiệm và Nên dùng cho case nào?
"Giảng viên Creyt" đã từng thử nghiệm với đủ loại cấu trúc dữ liệu, và đây là lời khuyên "xương máu" cho em:
-
Nên dùng
listkhi:- Em cần lưu trữ một tập hợp các item có thứ tự.
- Em thường xuyên cần thêm, bớt, sửa đổi các item trong tập hợp đó.
- Các item có thể khác kiểu dữ liệu (như ví dụ
thong_tin_sinh_vien). - Em cần truy cập các item bằng index hoặc cắt lát (slicing).
-
Không nên dùng
list(hoặc cân nhắc thay thế) khi:- Em cần một tập hợp các item duy nhất (không trùng lặp) và không quan tâm đến thứ tự: dùng
set. - Em cần ánh xạ một key đến một value (kiểu từ điển, như từ điển Anh-Việt): dùng
dict. - Em có một tập hợp các item cố định, không bao giờ thay đổi sau khi tạo: dùng
tuple. - Em làm việc với các tập dữ liệu số cực lớn, cần hiệu suất cao cho các phép toán số học: cân nhắc dùng
NumPy arrays(một thư viện chuyên biệt).
- Em cần một tập hợp các item duy nhất (không trùng lặp) và không quan tâm đến thứ tự: dùng
Đấy, qua bài này, em đã nắm được "sức mạnh" của list rồi đó. Hãy thực hành thật nhiều để biến kiến thức thành kỹ năng, và sớm trở thành một "phù thủy code" nhé! "Giảng viên Creyt" tin em!
Thuộc Series: Python
Bài giảng này được tự động xuất bản ngẫu nhiên từ thư viện kiến thức. Đừng quên đón xem các Từ khoá Hướng Dẫn tiếp theo nhé!