Hướng dẫn list comprehension python quiz - bài kiểm tra trăn trở về danh sách hiểu
Nhiều năm về trước, khi tôi còn đang là một lập trình viên .NET & Oracle DBA, do yếu tố công việc nên thi thoảng cũng có lúc dùng Python để viết một số script chạy trên server hoặc crawl dữ liệu từ các máy chủ khác. Lúc đó, tôi chỉ học các syntax và làm một số các ví dụ cơ bản bằng ngôn ngữ Python (tất nhiên là không dám điền vào CV là thành thạo Python rồi). Show Đến một ngày, khi "học thử" buổi 01 lớp học offline của nhóm pymi.vn (cộng đồng người học và lập trình Python khá lớn ở Hà Nội & TP HCM), tôi thực sự bất ngờ và mê mẩn trước một "vũ khí" đặc biệt được mentor thực hiện demo với lớp, một cú pháp mà chỉ ngôn ngữ lập trình Python mới có: List comprehension. Cú pháp list-comprehension cho phép lập trình viên có thể rút gọn các dòng code của mình khi xử lý dữ liệu trong các mảng/array/list xuống rất nhiều, thậm chí chỉ còn 01 dòng (so với 3-5 dòng code thông thường). List-comprehension là cái gì ?List-comprehension là một cú pháp cho phép lập trình viên nhanh chóng tạo ra một biến dữ liệu list mới từ một list cũ hoặc vòng lặp dạng in-line, kết hợp với các điều kiện cho trước.Về bản chất, lập trình viên hoàn toàn có thể tạo ra một list mới bằng cách sử dụng vòng lặp for/while thông thường. Cú pháp cơ bản:
Ví dụ: Cho một list gồm các string khác nhau, tạo ra một list mới với các string ở định dạng UPPER (viết hoa)
Một vài ứng dụng của list-comprehension.1. Lọc dữ liệu trong list (Filter)
Ngoài cách đặt filter ở cuối, chúng ta cũng có thể đặt filter ở phía trước. Ví dụ: Cho một list các số nguyên, tạo ra một list mới chỉ chứa các số chia hết cho 2.
42. Filter với biểu thức so sánh bên ngoàiPhần điều kiện filter ở some_condition ở thể không phải là so sánh trực tiếp mà có gọi đến một function bên ngoài và trả về kết quả so sánh. Ví dụ: Cho danh sách tên các con vật, tạo ra một danh sách mới chứa tên các con vật có 4 chân.
5Ví dụ: Cho một danh sách các số, hãy tạo ra một list mới là hiệu của 100 và các số trong list.
63. Exception handles khi dùng list-comprehensionViệc gọi ra function thực hiện filter bên ngoài sẽ giúp chúng ta có thể handles được các exception. Ví dụ: Thay vì tính hiệu của 100 và số trong list thì yêu cầu là tính thương (chia), nếu không thực hiện handles exception thì chúng ta sẽ bị lỗi tại phép chia cho 0
Thực hiện handles exception ở function 7 0 84. Sử dụng kết hợp với Walrus OperatorTừ bản Python 3.8 trở lên, Python có cú pháp khá thú vị là Walrus Operator (:= ) dùng để gán chung dữ liệu ngay trong các vòng lặp, câu lệnh so sánh, ...Việc sử dụng Walrus Operator kết hợp với list-comprehension cho ra những solution khá thú vị. Ví dụ: Cho 1 chuỗi, lấy ra ngẫu nhiên 10 ký tự trong chuỗi, sau đó tạo ra một list, nếu ký tự lấy ra không phải là nguyên âm thì thực hiện viết hoa ký tự đó và đưa vào list. Nếu làm theo cách thông thường, mất khoảng chừng này dòng code để làm: 1 9Nếu sử dụng Walrus Operator kết hợp list-comprehension 2 0So sánh tốc độ xử lý list-comprehension và vòng lặp thông thường.Sau một vài ví dụ ở trên, chúng ta có thể thấy list-comprehension được sử dụng với 2 mục đích chính: - Tạo ra một list mới từ vòng lặp.- Thực hiện filter dữ liệu trong list để tạo ra một list mới. Bài test này sẽ thực hiện test tốc độ xử lý của 2 trường hợp trên. 3Thời gian chạy lần 1: 1 2 3 4 1 2 3 4Thời gian chạy lần 2: 5 6 7 8 5 6 7 8Thời gian chạy lần 3: 9 0 1 2 9 0 1 2Nhìn kết quả trên, chúng ta đã thấy list-comprehension đang nhanh hơn cách làm thông thường, vậy có lý gì mà các lập trình Python lại không dùng list-comprehension nhỉ. Kết luậnNgoài list-comprehension, Python còn cung cấp set-comprehension, dict-comprehension với những ưu điểm không kém gì list-comprehension. Các bạn hãy khám phá thêm nhé. Cảm ơn các bạn đã theo dõi bài viết. |