Vòng lặp for giảm dần trong python

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:


  • Tự học Python trong 10 phút
  • Và hiểu về kiểu dữ liệu trong Python hơn với bài viết Thao tác với dữ liệu trong Python

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.

Vòng lặp for giảm dầ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}

  • Tham khảo: Lập trình Hàm trong Python để hiểu hơn về hàm lambda (hay còn gọi là hàm ẩn danh).

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:

  • https://docs.python.org/3/
  • https://docs.python.org/3.3/library/functions.html

---

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:

Fanpage: https://facebook.com/NIIT.ICT/

#niit #niithanoi #niiticthanoi #hoclaptrinh #khoahoclaptrinh #hoclaptrinhjava #hoclaptrinhphp #python #java #php