Mục tiêu bài học
- Hiểu cú pháp và cách hoạt động của List Comprehension
- Biết tạo danh sách mới từ danh sách có sẵn một cách ngắn gọn
- Áp dụng được với điều kiện lọc (
if
) và xử lý logic đơn giản - Làm quen với một cách viết hiện đại, nhanh gọn thay cho vòng lặp truyền thống
List Comprehension là gì?
Đây là cách viết danh sách mới từ danh sách cũ chỉ trong 1 dòng.
So với cách dùng for
thông thường, List Comprehension:
- Ngắn hơn
- Dễ nhìn hơn
- Chạy nhanh hơn trong nhiều trường hợp
Cú pháp cơ bản
[biểu_thức for biến in danh_sách]
Ví dụ: Bình phương các số từ 1 đến 5
Cách thường:
kq = []
for i in range(1, 6):
kq.append(i * i)
List comprehension:
kq = [i * i for i in range(1, 6)]
Thêm điều kiện lọc với if
[biểu_thức for biến in danh_sách if điều_kiện]
Ví dụ: Lấy số chẵn từ 1 đến 10
so_chan = [i for i in range(1, 11) if i % 2 == 0]
Lồng list comprehension
Bạn có thể dùng lồng nhiều vòng for
nếu cần:
# Tạo bảng cửu chương 2 đến 5
bang = [f"{i} x {j} = {i*j}" for i in range(2, 6) for j in range(1, 4)]
Kết hợp với if...else
["chẵn" if x % 2 == 0 else "lẻ" for x in range(5)]
Kết quả:
['chẵn', 'lẻ', 'chẵn', 'lẻ', 'chẵn']
Dùng với chuỗi, danh sách, tuple, v.v.
ten = ["lan", "bình", "nam"]
ten_hoa = [t.capitalize() for t in ten]
# ['Lan', 'Bình', 'Nam']
Các ví dụ thực tế
a. Tính chiều dài từng từ trong danh sách
tu = ["python", "code", "siêu", "ngắn"]
dodai = [len(x) for x in tu]
b. Loại bỏ dấu cách trong chuỗi
s = " xin chào python "
chars = [c for c in s if c != " "]
c. Lọc số nguyên dương từ danh sách hỗn hợp
lst = [1, -2, 0, 3, -1, 5]
duong = [x for x in lst if x > 0]
So sánh: for
thường vs. list comprehension
# Cách thường
kq = []
for i in range(10):
if i % 2 == 0:
kq.append(i)
# Cách viết đẹp hơn
kq = [i for i in range(10) if i % 2 == 0]
Bài tập luyện tập
Bài 1: Tạo danh sách bình phương của số lẻ từ 1 đến 20
Bài 2: Nhập danh sách tên, chuyển sang chữ in hoa dùng list comprehension
Bài 3: Cho danh sách số, tạo danh sách mới với chuỗi "chẵn"
hoặc "lẻ"
tương ứng
Bài 4: Cho danh sách chuỗi, tạo danh sách chứa các chuỗi có độ dài > 3
Kết luận
List Comprehension giúp bạn viết mã ngắn hơn, gọn hơn, dễ đọc hơn – một kỹ năng rất được khuyến khích trong Python hiện đại. Khi quen tay, bạn sẽ thấy đây là cách viết “gần như tự nhiên” khi xử lý dữ liệu trong danh sách.
Bài tiếp theo bạn sẽ mở rộng kiến thức về hàm, học cách truyền nhiều tham số không xác định, viết hàm ẩn danh, và tìm hiểu về đệ quy – nền tảng của rất nhiều thuật toán.
Thảo luận