Sử dụng Vòng lặp FOR tốt hơn trong PYTHON

Ngày đăng: 13/01/2020   -    Cập nhật: 20/04/2020
Khi chúng ta thực hiện một số hành động lặp lại trong Python, chúng ta thường sử dụng vòng lặp for.


Đây là một vòng lặp for thông thường trong Python:




students = ["Hải", "Doanh", "Việt", "Dũng"]
for student in students:
    print(student)



Kết quả:



Hải
Doanh
Việt
Dũng



Ngoài cách sử dụng đơn giản này, chúng ta có một số hàm dựng sẵn (built-in function) có thể sử dụng cùng với vòng lặp for.


Khi được sử dụng đúng cách, các hàm này có thể làm cho code của bạn sạch (clean) hơn nhiều.



Đọc thêm:



Bài này chúng ta sẽ cùng học sử dụng một số hàm dựng sẵn trong Python để sử dụng vòng lặp For tốt hơn.


Sử dụng Vòng lặp FOR tốt hơn trong PYTHON

Sử dụng Vòng lặp FOR tốt hơn trong PYTHON


1. Kết hợp vòng lặp for với items() values()



Giả sử, chúng ta có một dictionaries dưới đây:



scores = {"Hải": 9, "Doanh": 1, "Việt": 6, "Dũng": 7}



Khi bạn lặp dictionaries này bằng vòng lặp for, như thế này:



for score in scores:
    print(score)


thì,


Nó chỉ lấy các key trong dictionaries.




Hải
Doanh
Việt
Dũng



Kết quả này tương tự kết quả lặp một list ở trên.


Thay vì thế, chúng ta có thể sử dụng hàm items(), hàm này sẽ cho phép chúng ta truy cập vào cả keyvalue.




for score in scores.items():
    print(score)



Kết quả:



('Hải', 9)
('Doanh', 1)
('Việt', 6)
('Dũng', 7)



Bạn cũng có thể đặt tên cho các item trong tuple này để có thể truy cập trực tiếp.



for name, score in scores.items():
    print("Tên: " + name + ", Điểm: " + str(score))



Kết quả:



Tên: Hải, Điểm: 9
Tên: Doanh, Điểm: 1
Tên: Việt, Điểm: 6
Tên: Dũng, Điểm: 7



Hoặc, nếu bạn chỉ quan tâm đến các giá trị của dictionaries, bạn chỉ cần sử dụng hàm values().



for score in scores.values():
    print(score)



Kết quả chỉ in điểm số (giá trị value) mà thôi:



9
1
6
7



2. Sử dụng vòng lặp for với hàm enumerate()



Giả sử chúng ta có một list như bên dưới đây:



grades = ["Thực tập sinh", "Học việc", "Junior", "Senior"]



Đôi khi, chúng ta muốn truy cập cả chỉ mục (index) và chính item đó.


Trong trường hợp này, bạn có thể sử dụng hàm enumerate(), trong đó bạn truyền list làm tham số.




for grade in enumerate(grades):
    print(grade)



Kết quả:



(0, 'Thực tập sinh')
(1, 'Học việc')
(2, 'Junior')
(3, 'Senior')



Tương tự, bạn có thể truy cập chỉ mục và item nếu bạn tham chiếu đến các item của tuple sinh ra.


Ngoài ra, bạn có thể chỉ định chỉ số bắt đầu (start) cho hàm enumerate(), nó sẽ có ích trong trường hợp của chúng ta.




for year, name in enumerate(grades, start=1):
    print("Năm "+str(year)+": "+name)



Kết quả:



Năm 1: Thực tập sinh
Năm 2: Học việc
Năm 3: Junior
Năm 4: Senior



3. Sử dụng vòng lặp for với hàm reversed()



Giả sử chúng ta có list dưới đây:



arrived_students = ["Hải", "Doanh", "Việt", "Dũng"]



List này cho thấy danh sách sinh viên đến lớp theo thứ tự.


Sau đó, giảng viên kiểm tra bài tập về nhà mà muốn chọn từ người đến lớp muộn nhất.


Thế nên, giảng viên sẽ gọi lần lượt từ cuối danh sách.


Để làm như vậy, chúng ta có hàm reversed(), hàm này trả về một interator cho phép truy cập vào list đã cho theo chiều ngược lại.




for student in reversed(arrived_students):
    print(student)



Kết quả:



Dũng
Việt
Doanh
Hải



Một điều cần lưu ý là bạn cần phải phân biệt hàm reversed() với hàm reverse().


Hàm reverse() đảo ngược list đã cho nhưng không trả về bất kỳ giá trị nào.


Nói cách khác, bạn có thể gọi đến arrived_students.reverse(), nhưng bạn không thể trực tiếp lặp lại nó bằng cách gọi for student in arrived_students.reverse().


 

4. Sử dụng vòng lặp for với hàm sorted()



Giả sử chúng ta có list sau:



students = ["Hải", "Doanh", "Việt", "Dũng"]



Giảng viên muốn sắp xếp sinh viên dựa trên tên của họ và thực hiện một số hành động (ví dụ: Đặt câu hỏi).


Nó có thể được thực hiện với hàm sorted() bằng cách truyền vào students, sẽ tạo ra danh sách với tên của sinh viên được sắp xếp theo thứ tự tăng dần (mặc định).




for student in sorted(students):
    print(student)


Kết quả:



Doanh
Dũng
Hải
Việt



Bạn có thể tùy chọn đặt giá trị logic thành tham số reverse để yêu cầu sắp xếp theo thứ tự giảm dần, như thế này: sorted(students, reverse=True)
 


for student in sorted(students, reverse=True):
    print(student)



Kết quả:



Việt
Hải
Dũng
Doanh



Đây là list.


Vậy điều gì sẽ xảy ra khi sắp xếp với dictionaries?





students = [{"name": "Hải", "id": 1}, {"name": "Doanh", "id": 4}, {"name": "Việt", "id": 2}, {"name": "Dũng", "id": 3}]




Về cơ bản, chúng ta sắp xếp một list các dictionaries. Điều này có thể được thực hiện bằng cách đặt tham số key bằng hàm lambda trong hàm sorted().



for student in sorted(students, key = lambda i: i["id"], reverse=True):
    print(student)



Kết quả:



{'name': 'Doanh', 'id': 4}
{'name': 'Dũng', 'id': 3}
{'name': 'Việt', 'id': 2}
{'name': 'Hải', 'id': 1}




Trong ví dụ trên, chúng ta yêu cầu danh sách được sắp xếp theo id của dictionaries theo thứ tự ngược lại (Xem kết quả để hiểu rõ)


Ngoài ra, nếu bạn muốn sắp xếp với nhiều key, bạn chỉ cần thay đổi tham số key thành một cái gì đó như key = lambda i: i["name"]




for student in sorted(students, key = lambda i: i["name"], reverse=True):
    print(student)



Kết quả:



{'name': 'Việt', 'id': 2}
{'name': 'Hải', 'id': 1}
{'name': 'Dũng', 'id': 3}
{'name': 'Doanh', 'id': 4}



Hoặc thậm chí bạn có thể sắp xếp theo cả 2 key.


* Ví dụ này mình đổi lại tên sinh viên (có các tên trùng nhau) trong list một chút để bạn thấy rõ hơn việc sắp xếp theo 2 key:




students = [{"name": "Doanh", "id": 1}, {"name": "Doanh", "id": 2}, {"name": "Dũng", "id":3}, {"name": "Dũng", "id": 5}, {"name": "Vũ", "id": 4}, {"name":"Vũ", "id":8}]



Thực hiện vòng lặp for với hàm lambda:



for student in sorted(students, key = lambda i: (i["name"], i["id"]), reverse=True):
    print(student)



Kết quả:



{'name': 'Doanh', 'id': 1}
{'name': 'Doanh', 'id': 2}
{'name': 'Dũng', 'id': 3}
{'name': 'Dũng', 'id': 5}
{'name': 'Vũ', 'id': 4}
{'name': 'Vũ', 'id': 8}





5. Sử dụng vòng lặp for với hàm filter()



Giả sử chúng ta có danh sách sinh viên bên dưới đây:



students = [{"name": "Hải", "id": 1}, {"name": "Doanh", "id": 4}, {"name": "Việt", "id": 2}, {"name": "Dũng", "id": 3}]



Bây giờ, chúng ta chỉ muốn lấy ra sinh viên có id chẵn.


Chúng ta có thể sử dụng hàm filter kết hợp với lambda




for student in filter(lambda i: i["id"] % 2 == 0, students):
    print(student)




Kết quả:



{'name': 'Doanh', 'id': 4}
{'name': 'Việt', 'id': 2}



6. Sử dụng vòng lặp for với hàm zip()



Giả sử chúng ta có 2 list:



names = ["Hải", "Doanh", "Việt", "Dũng"]
ids = [1, 3, 2, 4]



Sử dụng hàm zip(), chúng ta có thể sử dụng thông tin từ cả hai list một cách thuận tiện.



for student in zip(names, ids):
    print (student)



Kết quả:



('Hải', 1)
('Doanh', 3)
('Việt', 2)
('Dũng', 4)



Và bạn cũng có thể truy cập trực tiếp vào các item của tuple nếu bạn gán tên biến cho chúng, như name, id in zip(names, ids).



for name, id in zip(names, ids):
    print ("Tên: "+str(name)+", id: "+str(id))



Kết quả:



Tên: Hải, id: 1
Tên: Doanh, id: 3
Tên: Việt, id: 2
Tên: Dũng, id: 4



Chúc mừng, bạn đã biết sử dụng vòng lặp for tốt hơn.



Vòng lặp for được sử dụng rất thường xuyên trong khi lập trình Python.


Hãy tận dụng các hàm trên trong vòng lặp for, bạn có khả năng có thể giảm độ dài code của mình, giúp đọc dễ dàng và thú vị hơn!


ĐỪNG QUÊN: Nếu bạn muốn làm chủ ngôn ngữ Python, Khóa học Python ở Hà Nội sẽ giúp bạn học vững chắc hơn, nhanh hơn.


Tài liệu tham khảo:





---

HỌC VIỆN ĐÀO TẠO CNTT NIIT - ICT HÀ NỘI
Dạy học Lập trình chất lượng cao (Since 2002). Học làm Lập trình viên. Hành động ngay!
Đc: Tầng 3, 25T2, N05, Nguyễn Thị Thập, Cầu Giấy, Hà Nội
SĐT: 02435574074 - 0914939543 - 0353655150 
Email: hello@niithanoi.edu.vn
Fanpage: https://facebook.com/NIIT.ICT/
 
#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php
Bình luận Facebook
Mục lục
Đăng ký tư vấn
Nhân viên gọi điện tư vấn miễn phí sau khi đăng ký
Được cập nhật các ưu đãi sớm nhất
Hotline: 0383180086
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Hãy đăng ký để nhận những thông tin mới nhất về học bổng mới nhất tại NIIT - ICT Hà Nội
top
Đóng lại Đăng ký học tại NIIT - ICT Hà Nội
6260+ học viên đã theo học tại NIIT - ICT Hà Nội và có việc làm tốt trong ngành lập trình. Nắm lấy cơ hội ngay hôm nay!
Chọn khóa học
  • KHÓA HỌC LẬP TRÌNH FRONT END VỚI REACT.JS
  • KHÓA HỌC LẬP TRÌNH PHP WEB
  • Khóa học PHP Full stack [2023] cho người mới bắt đầu
  • Khóa học BIG DATA với Hadoop và Spark
  • Khóa học Lập trình Android tại Hà Nội
  • [Tuyển sinh 2023] Lập trình viên Quốc tế DigiNxt
  • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại Hà Nội
  • LẬP TRÌNH GAME
    • Khóa học Lập trình Game Unity
  • LẬP TRÌNH WEB FRONT END
    • KHÓA HỌC PYTHON HƯỚNG ĐỐI TƯỢNG
    • KHÓA HỌC ANGULAR & TYPESCRIPT (FRONT END)
  • LẬP TRÌNH WEB BACK END
    • LẬP TRÌNH JAVA WEB VỚI FRAME WORK
    • Lập trình Web với Django
    • Lập trình PHP với Laravel Framework
  • CHƯƠNG TRÌNH ĐÀO TẠO ỨNG DỤNG CÔNG NGHỆ
    • Khóa học Tiền lương & Phúc lợi (C&B Excel) tại TP HCM
  • LẬP TRÌNH WEB FULL STACK
    • Khóa học Java Full stack (IJFD)
  • LẬP TRÌNH MOBILE
    • FRONT-END VỚI REACTJS VÀ REACT NATIVE
    • Lập trình Android Nâng cao
  • ĐÀO TẠO CHO DOANH NGHIỆP
    • KHÓA HỌC BUSINESS ANALYSIC TỪ CƠ BẢN ĐẾN NÂNG CAO 2023
    • Khóa học Magento: Làm chủ CMS TMĐT lớn nhất
    • Khóa học IOT: Xây dựng Sản phẩm IOT với Raspberry Pi
    • Khóa học Automation Testing Chuyên nghiệp
  • KHÓA HỌC DỰ ÁN
    • Học sử dụng bộ Office: Word, Excel, Power Point, Mail chuyên nghiệp
  • KHÓA HỌC KHÁC
    • VBA Excel Toàn Tập (Cơ Bản - Nâng Cao)
    • VBA Excel Nâng cao
    • Khóa học JMeter: Performance Testing
    • Khóa học Tester đạt chuẩn Quốc tế ISTQB Foundation Level
    • Khoá Học Tester đạt chuẩn quốc tế ISTQB Advanced Level
Bạn chưa chọn khóa học cần đăng ký
Tên không được để trống
Số điện thoại không được để trống
Email không được để trống
Đăng ký học thành công!
Cảm ơn bạn đã đăng ký học tại NIIT - ICT HÀ NỘI!