Bài 4.1. Lặp qua toàn bộ List

Bài 4.1. Lặp qua toàn bộ List
Bạn sẽ thường muốn chạy qua tất cả các mục trong một danh sách, thực hiện cùng một tác vụ với mỗi mục. Ví dụ, trong một trò chơi, bạn có thể muốn di chuyển mọi phần tử trên màn hình cùng một lượng. Trong một danh sách các số, bạn có thể muốn thực hiện cùng một phép toán thống kê trên mỗi phần tử. Hoặc có lẽ bạn sẽ muốn hiển thị từng tiêu đề từ một danh sách các bài báo trên một trang web. Khi bạn muốn thực hiện cùng một hành động với mọi mục trong một danh sách, bạn có thể sử dụng vòng lặp for của Python.
Giả sử chúng ta có một danh sách các tên ảo thuật gia, và chúng ta muốn in ra từng tên trong danh sách. Chúng ta có thể làm điều này bằng cách lấy từng tên từ danh sách một cách riêng lẻ, nhưng cách tiếp cận này có thể gây ra một số vấn đề. Thứ nhất, sẽ rất lặp đi lặp lại khi làm điều này với một danh sách dài các tên. Ngoài ra, chúng ta sẽ phải thay đổi mã của mình mỗi khi độ dài của danh sách thay đổi. Sử dụng vòng lặp for tránh cả hai vấn đề này bằng cách để Python quản lý các vấn đề này nội bộ.
Hãy sử dụng vòng lặp for để in ra từng tên trong danh sách các ảo thuật gia:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(magician)
Chúng ta bắt đầu bằng cách định nghĩa một danh sách, giống như chúng ta đã làm trong Chương 3. Sau đó, chúng ta định nghĩa một vòng lặp for. Dòng này cho Python biết lấy một tên từ danh sách magicians và liên kết nó với biến magician. Tiếp theo, chúng ta cho Python biết in ra tên vừa được gán cho magician. Python sau đó lặp lại hai dòng này, một lần cho mỗi tên trong danh sách. Có thể hữu ích khi đọc mã này như "Đối với mỗi ảo thuật gia trong danh sách các ảo thuật gia, in ra tên của ảo thuật gia đó." Đầu ra là một bản in đơn giản của từng tên trong danh sách:
alice
david
carolina
Xem xét kỹ hơn về vòng lặp
Vòng lặp quan trọng vì nó là một trong những cách phổ biến nhất mà máy tính tự động hóa các tác vụ lặp đi lặp lại. Ví dụ, trong một vòng lặp đơn giản như chúng ta đã sử dụng trong magicians.py, Python ban đầu đọc dòng đầu tiên của vòng lặp:
for magician in magicians:
Dòng này cho Python biết lấy giá trị đầu tiên từ danh sách magicians và liên kết nó với biến magician. Giá trị đầu tiên này là 'alice'. Python sau đó đọc dòng tiếp theo:
print(magician)
Python in ra giá trị hiện tại của magician, vẫn là 'alice'. Vì danh sách chứa nhiều giá trị hơn, Python quay lại dòng đầu tiên của vòng lặp:
for magician in magicians:
Python lấy tên tiếp theo trong danh sách, 'david', và liên kết giá trị đó với biến magician. Python sau đó thực thi dòng:
print(magician)
Python in ra giá trị hiện tại của magician một lần nữa, bây giờ là 'david'. Python lặp lại toàn bộ vòng lặp một lần nữa với giá trị cuối cùng trong danh sách, 'carolina'. Vì không còn giá trị nào trong danh sách, Python chuyển sang dòng tiếp theo trong chương trình. Trong trường hợp này, không có gì đến sau vòng lặp for, vì vậy chương trình kết thúc.
Khi bạn sử dụng vòng lặp lần đầu tiên, hãy nhớ rằng tập hợp các bước được lặp lại một lần cho mỗi mục trong danh sách, bất kể danh sách có bao nhiêu mục. Nếu bạn có một triệu mục trong danh sách của mình, Python lặp lại các bước này một triệu lần - và thường rất nhanh chóng.
Cũng hãy nhớ rằng khi viết vòng lặp for của riêng bạn, bạn có thể chọn bất kỳ tên nào bạn muốn cho biến tạm thời sẽ được liên kết với mỗi giá trị trong danh sách. Tuy nhiên, sẽ hữu ích khi chọn một tên có ý nghĩa đại diện cho một mục duy nhất từ danh sách. Ví dụ, đây là một cách tốt để bắt đầu một vòng lặp for cho một danh sách các con mèo, một danh sách các con chó và một danh sách chung các mục:
for cat in cats:
for dog in dogs:
for item in list_of_items:
Các quy ước đặt tên này có thể giúp bạn theo dõi hành động đang được thực hiện trên mỗi mục trong vòng lặp for. Sử dụng tên số ít và số nhiều có thể giúp bạn xác định liệu một phần mã đang làm việc với một phần tử duy nhất từ danh sách hay toàn bộ danh sách.
Làm nhiều việc hơn trong vòng lặp for
Bạn có thể làm hầu như bất cứ điều gì với mỗi mục trong vòng lặp for. Hãy xây dựng trên ví dụ trước bằng cách in một thông báo cho mỗi ảo thuật gia, nói rằng họ đã thực hiện một trò ảo thuật tuyệt vời:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
Sự khác biệt duy nhất trong mã này là nơi chúng ta tạo ra một thông báo cho mỗi ảo thuật gia, bắt đầu bằng tên của ảo thuật gia đó. Lần đầu tiên qua vòng lặp, giá trị của magician là 'alice', vì vậy Python bắt đầu thông báo đầu tiên với tên 'Alice'. Lần thứ hai qua, thông báo sẽ bắt đầu với 'David', và lần thứ ba qua, thông báo sẽ bắt đầu với 'Carolina'.
Đầu ra cho thấy một thông báo cá nhân hóa cho mỗi ảo thuật gia trong danh sách:
Alice, that was a great trick!
David, that was a great trick!
Carolina, that was a great trick!
Bạn cũng có thể viết bao nhiêu dòng mã tùy thích trong vòng lặp for. Mỗi dòng thụt lề sau dòng for magician in magicians được coi là bên trong vòng lặp, và mỗi dòng thụt lề được thực thi một lần cho mỗi giá trị trong danh sách. Do đó, bạn có thể làm nhiều việc với mỗi giá trị trong danh sách.
Hãy thêm một dòng thứ hai vào thông báo của chúng ta, nói với mỗi ảo thuật gia rằng chúng ta đang mong chờ trò ảo thuật tiếp theo của họ:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see your next trick, {magician.title()}.\n")
Vì chúng ta đã thụt lề cả hai lệnh gọi print(), mỗi dòng sẽ được thực thi một lần cho mỗi ảo thuật gia trong danh sách. Dòng mới ("\n") trong lệnh gọi print() thứ hai chèn một dòng trống sau mỗi lần qua vòng lặp. Điều này tạo ra một tập hợp các thông báo được nhóm gọn gàng cho mỗi người trong danh sách:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Bạn có thể sử dụng bao nhiêu dòng tùy thích trong các vòng lặp for của mình. Trong thực tế, bạn sẽ thường thấy hữu ích khi thực hiện một số thao tác khác nhau với mỗi mục trong danh sách khi bạn sử dụng vòng lặp for.
Làm điều gì đó sau vòng lặp for
Điều gì xảy ra khi một vòng lặp for đã hoàn thành việc thực thi? Thông thường, bạn sẽ muốn tóm tắt một khối đầu ra hoặc chuyển sang công việc khác mà chương trình của bạn phải hoàn thành.
Bất kỳ dòng mã nào sau vòng lặp for không được thụt lề sẽ được thực thi một lần mà không lặp lại. Hãy viết một lời cảm ơn đến nhóm ảo thuật gia như một tổng thể, cảm ơn họ vì đã trình diễn một buổi biểu diễn tuyệt vời. Để hiển thị thông báo nhóm này sau khi tất cả các thông báo cá nhân đã được in, chúng ta đặt thông báo cảm ơn sau vòng lặp for, không thụt lề:
magicians = ['alice', 'david', 'carolina']
for magician in magicians:
print(f"{magician.title()}, that was a great trick!")
print(f"I can't wait to see your next trick, {magician.title()}.\n")
print("Thank you, everyone. That was a great magic show!")
Hai lệnh gọi print() đầu tiên được lặp lại một lần cho mỗi ảo thuật gia trong danh sách, như bạn đã thấy trước đó. Tuy nhiên, vì dòng cuối cùng không được thụt lề, nó chỉ được in một lần:
Alice, that was a great trick!
I can't wait to see your next trick, Alice.
David, that was a great trick!
I can't wait to see your next trick, David.
Carolina, that was a great trick!
I can't wait to see your next trick, Carolina.
Thank you, everyone. That was a great magic show!
Khi bạn xử lý dữ liệu bằng cách sử dụng vòng lặp for, bạn sẽ thấy rằng đây là một cách tốt để tóm tắt một thao tác đã được thực hiện trên toàn bộ tập dữ liệu. Ví dụ, bạn có thể sử dụng vòng lặp for để khởi tạo một trò chơi bằng cách chạy qua một danh sách các nhân vật và hiển thị từng nhân vật trên màn hình. Sau đó, bạn có thể viết một số mã bổ sung sau vòng lặp này để hiển thị nút Play Now sau khi tất cả các nhân vật đã được vẽ lên màn hình.
Comments