Ví dụ, bạn có thể sử dụng vòng lặp để lặp qua danh sách giá trị, tích lũy tổng, lặp lại hành động, v.v.
Trong Python, bạn có thể sử dụng các vòng lặp for và while để đạt được hành vi lặp
Ví dụ: đây là một vòng lặp for đơn giản in danh sách tên vào bảng điều khiển
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]
Và đây là một vòng lặp while đơn giản in các số từ 0 đến 5
i = 0 while[i < 5]: print[i] i += 1
Trong hướng dẫn này, bạn sẽ học
- Cách sử dụng vòng lặp for và while trong Python [thân thiện với người mới bắt đầu]
- Cách kiểm soát luồng của vòng lặp for và while [thân thiện với người mới bắt đầu]
- Các cách khác để tạo vòng lặp for và while trong Python [trung cấp]
- Cách sử dụng mô-đun Itertools của Python cho các tác vụ liên quan đến vòng lặp [trung cấp]
Đối với vòng lặp trong Python
Trong Python, vòng lặp for được sử dụng để lặp qua một lần lặp [chẳng hạn như danh sách hoặc từ điển]
- Iterable là bất kỳ đối tượng Python nào mà bạn có thể lặp lại. Ví dụ: một danh sách hoặc một từ điển
Đây là cú pháp cơ bản của vòng lặp for
for val in sequence: # some action
Trong đó val là biến trong đó các phần tử bên trong chuỗi được lưu trữ lần lượt trong mỗi lần lặp
Chẳng hạn, hãy lặp qua một danh sách tên và in chúng
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]
đầu ra
Ann Sofie Jack
Đối với… Vòng lặp khác trong Python
Bạn có thể sử dụng câu lệnh other trong vòng lặp for. Khối khác được thực thi khi vòng lặp kết thúc
Ví dụ
for i in range[3]: print[i] else: print['Looping completed.']
đầu ra
0 1 2 Looping completed.
Hàm Range[] trong Python—Theo dõi chỉ mục vòng lặp
Cho đến giờ, bạn đã thấy một vòng lặp for chọn từng phần tử một từ một tập hợp
Tuy nhiên, đôi khi bạn có thể muốn sử dụng cách tiếp cận truyền thống để lặp. bắt đầu từ số
0 1 2 Looping completed.5 và kết thúc đến
0 1 2 Looping completed.6. Ví dụ, điều này có thể hữu ích khi bạn muốn liên kết một chỉ mục với từng phần tử
Bạn có thể sử dụng hàm range[] tích hợp để đạt được điều này. Hàm này trả về một đối tượng phạm vi là một dãy số trong phạm vi đã cho. Hàm phạm vi loại trừ đối số thứ hai
Ví dụ
print[list[range[0,5]]]
đầu ra
i = 0 while[i < 5]: print[i] i += 10
Ví dụ: hãy in tên của một nhóm người và vị trí tương đối của họ trong hàng đợi bằng hàm range[]
i = 0 while[i < 5]: print[i] i += 11
đầu ra
i = 0 while[i < 5]: print[i] i += 10
Tìm thêm ví dụ về vòng lặp tại đây
Vòng lặp While trong Python
Bây giờ bạn đã biết những kiến thức cơ bản về cách sử dụng vòng lặp for. Tiếp theo chúng ta hãy xem vòng lặp while
Trong python, bạn có thể sử dụng vòng lặp while để lặp lại một khối câu lệnh cho đến khi một điều kiện nhất định được thỏa mãn. Khi điều kiện trở thành sai vòng lặp kết thúc
Chẳng hạn, để in các số từ 0 đến 5, bạn có thể sử dụng vòng lặp while như thế này
i = 0 while[i < 5]: print[i] i += 11
đầu ra
i = 0 while[i < 5]: print[i] i += 12
Tương tự như vòng lặp for, bạn có thể sử dụng vòng lặp while để lặp qua các vòng lặp, chẳng hạn như danh sách các số
Để lặp qua một danh sách bằng vòng lặp while, bạn cần biết độ dài của danh sách và theo dõi một chỉ mục để không bắn quá nhiều vào nó. Điều này là do vòng lặp while hoạt động sao cho trên mỗi lần lặp lại, bạn truy cập vào một phần tử danh sách có chỉ mục
Ví dụ
i = 0 while[i < 5]: print[i] i += 13
đầu ra
i = 0 while[i < 5]: print[i] i += 14
Vòng lặp While…Else trong Python
Bạn có thể sử dụng câu lệnh else trong vòng lặp while . Khối khác được thực thi khi điều kiện lặp trở thành sai. Nói cách khác, khi vòng lặp kết thúc
Nếu một vòng lặp bị kết thúc bởi câu lệnh break thì khối lệnh khác không được thực thi
Đọc thêm về các khối khác trong vòng lặp trong Python
Ví dụ
i = 0 while[i < 5]: print[i] i += 15
đầu ra
i = 0 while[i < 5]: print[i] i += 16
Vòng lặp lồng nhau trong Python
Bây giờ bạn đã biết cách sử dụng cả vòng lặp for và while trong Python
Cần hiểu rằng bạn có thể tạo một vòng lặp bên trong một vòng lặp. Đây được gọi là vòng lặp lồng nhau
Ví dụ, đây là một vòng lặp for lồng nhau để in các danh sách của một danh sách
i = 0 while[i < 5]: print[i] i += 17
đầu ra
i = 0 while[i < 5]: print[i] i += 18
Ví dụ vòng lặp While lồng nhau
Hãy lặp lại ví dụ trên với vòng lặp while lồng nhau
i = 0 while[i < 5]: print[i] i += 19
đầu ra
i = 0 while[i < 5]: print[i] i += 18
Phá vỡ, Tiếp tục và Vượt qua — Kiểm soát Dòng chảy của Vòng lặp
Bạn có thể kiểm soát luồng thực thi của một vòng lặp bằng cách sử dụng các câu lệnh và tiếp tục. Chúng hoạt động theo cùng một cách đối với cả vòng lặp while và
0 1 2 Looping completed.7 vòng lặp
- Câu lệnh break kết thúc vòng lặp và tiếp tục thực thi ở câu lệnh đầu tiên sau vòng lặp
- Câu lệnh tiếp tục kết thúc bước lặp hiện tại của vòng lặp và chuyển sang bước lặp tiếp theo
Ví dụ phá vỡ
Câu lệnh break ngắt vòng lặp và tiếp tục thực hiện chương trình từ dòng có thể tiếp theo sau vòng lặp
Ví dụ
for val in sequence: # some action1
đầu ra
for val in sequence: # some action2
tiếp tục ví dụ
Câu lệnh continue bỏ qua “phần còn lại của vòng lặp” và bắt đầu lần lặp tiếp theo
for val in sequence: # some action3
đầu ra
for val in sequence: # some action4
Câu lệnh tiếp tục nhảy ra khỏi lần lặp hiện tại và bắt đầu lần lặp tiếp theo. Nếu n > 3 câu lệnh tiếp tục không đạt được nữa. Điều này có nghĩa là hành động in sẽ diễn ra
Bây giờ bạn đã biết cách kiểm soát luồng thực thi của một vòng lặp bằng cách sử dụng các câu lệnh break và tiếp tục
Hãy cùng xem câu lệnh pass là một cách để bỏ qua một vòng lặp trống
Truyền câu lệnh trong Python
Trong Python, không thể để trống một vòng lặp [hoặc bất kỳ thứ gì xuất hiện sau dấu hai chấm]. Nhưng có một thẻ từ khóa dành riêng cho điều đó
Chẳng hạn, nếu bạn muốn vượt qua việc triển khai vòng lặp for, hãy thực hiện như thế này
for val in sequence: # some action5
Một lớp lót cho các vòng lặp bằng cách hiểu danh sách
Bây giờ bạn đã biết kiến thức cơ bản về vòng lặp trong Python. Đã đến lúc xem xét cách nén các vòng lặp bằng cách hiểu. Điều này có thể giúp giảm dòng mã và cải thiện chất lượng mã
Khả năng hiểu danh sách là một tính năng tích hợp sẵn trong Python. Bạn có thể thay thế các vòng lặp bằng các biểu thức một dòng
Cú pháp để hiểu danh sách trông như thế này
for val in sequence: # some action6
Liệt kê các ví dụ về sự hiểu biết
Hãy in một danh sách các số bằng cách hiểu
for val in sequence: # some action7
đầu ra
i = 0 while[i < 5]: print[i] i += 14
Ví dụ này không thực tế, bởi vì việc hiểu danh sách có nghĩa là tạo một lần lặp mới dựa trên một lần lặp hiện có
Để chứng minh điều này, hãy bình phương một danh sách các số
for val in sequence: # some action9
đầu ra
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]0
Bạn có thể thêm một điều kiện vào cuối phần hiểu. Chẳng hạn, hãy lọc các số lẻ ra khỏi danh sách
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]1
đầu ra
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]2
Liệt kê hiệu suất hiểu trong Python
Khả năng hiểu danh sách nhanh hơn ~10% so với vòng lặp for thông thường
Ví dụ: đây là mức trung bình trong thời gian chạy bằng cách sử dụng cả khả năng hiểu vòng lặp và danh sách để bình phương danh sách 1 triệu số nguyên
Đối với việc bình phương một danh sách các số, khả năng hiểu nhanh hơn khoảng 10%.Tuy nhiên, lợi thế nhỏ về hiệu suất không phải là lý do để sử dụng khả năng hiểu. Mục tiêu của việc sử dụng khả năng hiểu là để tránh các dòng mã không cần thiết và cải thiện khả năng đọc. Sử dụng các cách hiểu dài dòng để đạt hiệu suất sẽ không có ý nghĩa gì nếu nó hy sinh chất lượng mã.
Các kiểu hiểu khác trong Python
Hiểu danh sách không phải là loại hiểu duy nhất có. Python cũng hỗ trợ
Để giữ cho nó ngắn gọn, tôi sẽ không đưa ra các ví dụ về những điều này. Hơn nữa, những cách hiểu này gần giống với cách hiểu danh sách
Tóm tắt hiểu
- Khả năng hiểu danh sách có thể cải thiện chất lượng mã và giảm số lượng dòng mã
- Tránh viết danh sách hiểu dài dòng. Điều này làm cho mã khó theo dõi
- Mọi cách hiểu danh sách có thể được viết dưới dạng vòng lặp for, nhưng không phải theo cách khác
- Sự hiểu biết mang lại lợi thế về hiệu suất nhỏ so với vòng lặp for thông thường
Hàm liệt kê [] trong Python
Bạn có nhớ ví dụ mà bạn đã sử dụng hàm range[] trong vòng lặp for để theo dõi chỉ mục của phần tử hiện tại không? . Hàm enumerate[] tích hợp sẵn. Bạn có thể sử dụng nó với các vòng lặp để theo dõi chỉ mục của phần tử hiện tại
Ví dụ
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]3
đầu ra
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]4
Liệt kê [] hoạt động như thế nào
Hàm enumerate[] có hai đối số
- Một đối tượng có thể lặp lại, chẳng hạn như một danh sách
- Chỉ mục bắt đầu tùy chọn, là 0 theo mặc định
Nó hoạt động bằng cách trả về một đối tượng liệt kê có chứa các thành phần của iterable cùng với một chỉ mục. Điều này rất hữu ích khi lặp. Bạn không cần theo dõi chỉ mục của phần tử hiện tại vì enumerate[] làm việc đó cho bạn
Hãy chứng minh những gì enumerate[] làm
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]5
đầu ra
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]6
Các phần tử danh sách được kết hợp với các chỉ mục. Điều này giúp bạn có thể biết chỉ mục của từng phần tử trong vòng lặp for
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]7
Thay đổi giá trị ban đầu của chỉ mục trong enumerate[]
Hàm enumerate[] chấp nhận giây. Đây là chỉ mục bắt đầu có giá trị 0 theo mặc định. Nếu bạn muốn lập chỉ mục bắt đầu từ một nơi khác, vui lòng xác định đối số bắt đầu
Ví dụ: hãy bắt đầu lập chỉ mục từ 10
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]8
đầu ra
names = ["Ann", "Sofie", "Jack"] for name in names: print[name]9
Điều này kết thúc những điều cơ bản về vòng lặp trong Python bằng cách sử dụng vòng lặp for và while. Các chương tiếp theo là Python trung gian hiển thị cho bạn các lựa chọn thay thế vòng lặp for và while
Thay thế các vòng lặp For và While trong Python bằng các hàm Map[] và Filter[]
Bây giờ bạn đã biết những kiến thức cơ bản về vòng lặp trong Python, hãy chuyển sang các khái niệm trung gian
Trong Python, có các hàm tích hợp dành riêng cho vòng lặp. Các tính năng này hoạt động bằng cách áp dụng hàm lambda trên từng thành phần trong danh sách và trả về phiên bản đã chuyển đổi của danh sách
Trước khi hiển thị ví dụ về cách sử dụng map[] và filter[], hãy cùng tìm hiểu hàm lambda là gì
Biểu thức Lambda trong Python
Hàm lambda là một hàm không có tên. Nó nhận bất kỳ số đối số nào và chỉ có một biểu thức
Để chứng minh, đây là một hàm lambda bình phương một số
Ann Sofie Jack0
Chẳng hạn, hãy bình phương một số bằng hàm lambda
Ann Sofie Jack1
đầu ra
Ann Sofie Jack2
Lambdas rất hữu ích khi cần chức năng này trong một khoảng thời gian ngắn. Nói cách khác, khi bạn không muốn lãng phí tài nguyên bằng cách tạo một phương thức riêng. Một ví dụ tuyệt vời là khi chuyển nó vào hàm map[]
Hàm Map[] trong Python
Hàm map[] là hàm thay thế cho vòng lặp for. Nó áp dụng một chức năng cho từng phần tử của một lần lặp. Hàm map[] chấp nhận hai đối số
- Một hàm được áp dụng cho từng phần tử trong danh sách [biểu thức lambda]
- Một danh sách để hoạt động
Hàm
0 1 2 Looping completed.8 trả về là một đối tượng bản đồ. Điều này có thể dễ dàng được chuyển đổi thành một danh sách với hàm list[]
Để chứng minh điều này, hãy bình phương một danh sách các số
Ann Sofie Jack3
đầu ra
Ann Sofie Jack4
Hàm Filter[] trong Python
Hàm filter[] dùng để lọc các phần tử dựa trên một điều kiện. Hàm lọc nhận hai đối số
- Biểu thức lambda—một hàm được thực thi cho từng phần tử trong danh sách
- Một iterable, chẳng hạn như một danh sách, trên đó nó hoạt động
Chẳng hạn, hãy lọc các số chẵn của danh sách số
Ann Sofie Jack5
đầu ra
Ann Sofie Jack6
Itertools—Vòng lặp hiệu quả và dễ dàng trong Python
Itertools là một mô-đun Python. Nó cung cấp cho bạn các hàm để thực hiện các tác vụ liên quan đến lặp qua các lần lặp. Một phương thức Itertool trả về một đối tượng iterator
Trước khi xem các ví dụ, đây là một định nghĩa ngắn cho một trình vòng lặp một có thể lặp lại
- Iterable là bất kỳ đối tượng Python nào mà bạn có thể lặp lại. Ví dụ: một danh sách hoặc một từ điển
- Trình lặp là một đối tượng dùng để lặp qua một có thể lặp lại. Một iterator chỉ quan tâm đến phần tử hiện tại của iterable và biết cách lấy phần tử tiếp theo. Điều này làm cho bộ nhớ hiệu quả. Mọi trình lặp đều có thể lặp lại theo bản chất, nhưng không phải theo cách khác
Hãy đi qua một số phương pháp Itertools hữu ích. Nếu không có những thứ này, bạn sẽ cần phải viết các vòng lặp lồng nhau phức tạp để hoàn thành công việc
Tích lũy một danh sách các số
Để tính tổng tích lũy, bạn có thể sử dụng vòng lặp for. Nhưng với sự trợ giúp của Itertools, bạn có thể sử dụng itertools. tích trữ[]
Dưới đây là một minh họa về sự tích lũy
Tích lũy một khoản tiền đang chạy bằng ItertoolsĐây là mã
Ann Sofie Jack7
đầu ra
Ann Sofie Jack8
Nếu bạn muốn tích một thứ khác ngoài tổng, hãy chuyển một đối số khác cho phương thức accumulate[]. Đối số này là một hàm được áp dụng cho các phần tử
Ví dụ: hãy tích lũy sản phẩm
Tích lũy sản phẩm đang chạyĐể làm điều này, vượt qua toán tử. mul vào phương thức accumulate[] để tích lũy tích thay vì tổng.
Ann Sofie Jack9
đầu ra
for i in range[3]: print[i] else: print['Looping completed.']0
Nhóm một tập hợp các phần tử với chức năng groupby[]
Bạn có thể nhóm một lần lặp theo một tiêu chí bằng cách sử dụng itertools. phương thức groupby[]
Hãy nhóm danh sách các số sau đây thành các nhóm số nhỏ hơn ba và lớn hơn bằng ba
for i in range[3]: print[i] else: print['Looping completed.']1
đầu ra
for i in range[3]: print[i] else: print['Looping completed.']2
Tính tích Descartes
Tích Descartes là một nhóm gồm tất cả các cặp từ hai danh sách
tích DescartesĐể tính tích Descartes, bạn có thể sử dụng vòng lặp for. Nhưng Itertools cung cấp cho bạn một cách để lấy nó bằng cách sử dụng itertools. phương thức product[]. Nó trả về tích Descartes dưới dạng một đối tượng lặp
Ví dụ
for i in range[3]: print[i] else: print['Looping completed.']3
đầu ra
for i in range[3]: print[i] else: print['Looping completed.']4
Có được tất cả các hoán vị
Với một nhóm các mục, bạn có thể tìm tất cả các cách có thể để sắp xếp chúng bằng itertools. hoán vị[]
Ví dụ
for i in range[3]: print[i] else: print['Looping completed.']5
đầu ra
for i in range[3]: print[i] else: print['Looping completed.']6
Nhận tất cả các kết hợp
Sử dụng itertools. tổ hợp[] để tìm tất cả các tổ hợp [có kích thước n] của một nhóm mục
Chẳng hạn, hãy tìm tất cả các cặp bạn có thể tạo từ danh sách ba số
for i in range[3]: print[i] else: print['Looping completed.']7
đầu ra
for i in range[3]: print[i] else: print['Looping completed.']8
Trình vòng lặp vô hạn—Vòng lặp vô hạn hợp lệ
Trình lặp vô hạn có thể đưa ra một dòng số vô hạn. Nó giống như một “vòng lặp vô hạn hợp lệ”
Không thể lưu trữ vô số phần tử trong bộ nhớ. Nhưng vì trình vòng lặp chỉ quan tâm đến phần tử hiện tại nên có thể tạo ra vô số luồng mục mục bằng cách sử dụng trình vòng lặp
Hãy đi qua các ví dụ
Đếm
Bạn có thể sử dụng itertools. Count[] phương thức lặp số từ số bắt đầu đến vô cùng
Ví dụ: hãy tạo một dòng số vô hạn bắt đầu từ 10
for i in range[3]: print[i] else: print['Looping completed.']9
đầu ra
0 1 2 Looping completed.0
Đi xe đạp
Bạn có thể sử dụng Itertools để sắp xếp danh sách các số bằng itertools. chu kỳ[] phương pháp. Chu kỳ lặp đi lặp lại mãi mãi