Python vòng lặp lồng nhau

Vòng lặp là một mẫu lập trình phổ biến trong Python. Với một vòng lặp, bạn có thể lặp lại mã mà không cần nỗ lực thủ công. Ví dụ: bạn có thể sử dụng vòng lặp để duyệt qua danh sách tên và sắp xếp chúng. Đôi khi, bạn có thể cần đặt một vòng lặp bên trong một vòng lặp khác. Đây được gọi là vòng lặp lồng nhau trong lập trình

Mặc dù không có gì đặc biệt về các vòng lặp lồng nhau, nhưng khi mới bắt đầu, chúng có vẻ hơi đáng sợ hoặc dài dòng.

Đây là hướng dẫn toàn diện về các vòng lặp lồng nhau trong Python. Bạn sẽ học cách xây dựng các vòng lặp lồng nhau, thoát khỏi chúng, chuyển giữa các vòng lặp, v.v. Tất cả các lý thuyết được sao lưu với các ví dụ minh họa tuyệt vời

Vòng lặp lồng nhau trong Python là gì?

Thuật ngữ “nested” thường được sử dụng trong lập trình

Theo định nghĩa, từ “lồng nhau” có nghĩa là có một đối tượng được đặt bên trong một đối tượng khác cùng loại

Trong Python, bạn có thể đặt bất kỳ mã hợp lệ nào bên trong một vòng lặp. Nó thậm chí có thể là một vòng lặp khác

Vòng lặp nằm bên trong vòng lặp được gọi là vòng lặp lồng nhau. Lưu ý rằng vòng lặp lồng nhau không phải là khái niệm chỉ dành cho Python. Các vòng lặp lồng nhau có mặt trong tất cả các ngôn ngữ lập trình khác, vì vậy thuật ngữ này rất tốt để học

Vòng lặp lồng nhau hoạt động như thế nào trong Python?

Không có giới hạn về số lượng vòng lặp bạn có thể đặt bên trong một vòng lặp

Để minh họa cách thức hoạt động của một vòng lặp lồng nhau, hãy mô tả một vòng lặp lồng nhau gồm hai vòng lặp. Một vòng lặp bên ngoài và một vòng lặp bên trong

Đây là cú pháp chung của một vòng lặp for lồng nhau trông như thế nào

for element in sequence1:
   for element in sequence2:
      # inner loop body here
   # outer loop body here

Mỗi lần lặp của vòng lặp bên ngoài làm cho vòng lặp bên trong chạy tất cả các lần lặp của nó. Vòng lặp bên ngoài không chạy trước khi vòng lặp bên trong kết thúc

Làm rõ. Các vòng lặp lồng nhau không chỉ dành cho các vòng lặp. Bạn có thể đặt vòng lặp while bên trong vòng lặp while, vòng lặp while bên trong vòng lặp for, v.v. Vòng lặp lồng nhau là vòng lặp có ít nhất một vòng lặp bên trong nó

Một tình huống điển hình để sử dụng vòng lặp lồng nhau là khi làm việc với dữ liệu đa chiều, chẳng hạn như danh sách các danh sách hoặc những thứ tương tự.

Hãy xem một số ví dụ đơn giản về vòng lặp lồng nhau

ví dụ 1. Vòng lặp lồng nhau

Hãy sử dụng vòng lặp for lồng nhau để in bảng cửu chương của 10 số đầu tiên

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()

đầu ra

1 2 3 4 5 6 7 8 9 10 
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 
4 8 12 16 20 24 28 32 36 40 
5 10 15 20 25 30 35 40 45 50 
6 12 18 24 30 36 42 48 54 60 
7 14 21 28 35 42 49 56 63 70 
8 16 24 32 40 48 56 64 72 80 
9 18 27 36 45 54 63 72 81 90 
10 20 30 40 50 60 70 80 90 100

Chúng ta hãy xem xét kỹ hơn cách thức hoạt động của chương trình này

  1. Vòng lặp bên ngoài lặp lại các số từ 1 đến 10 và lưu trữ số hiện tại trong một biến tạm thời i. Vì vậy, trong lần lặp đầu tiên, i = 1, ở lần lặp thứ hai, i = 2, v.v.
  2. Vòng lặp bên trong cũng lặp lại các số từ 1 đến 10. Vòng lặp bên trong lưu trữ số lần lặp hiện tại trong một biến j
  3. Đối với mỗi lần lặp vòng lặp bên ngoài, vòng lặp bên trong sẽ chạy hoàn toàn, tức là 10 lần
  4. Vì vậy, ví dụ, trong lần lặp đầu tiên của vòng lặp bên ngoài, i = 1 trong khi j đi từ 1 đến 10. Trong lần lặp thứ hai, i = 2 và j lại đi từ 1 đến 10, v.v.
  5. Kết quả là một bảng cửu chương trong đó mỗi số 1…10 được nhân với 1…10
Illustration of the parts of a nested loop in Python

Nhân tiện, nếu bạn muốn định dạng phép nhân một cách độc đáo để các số thẳng hàng trong mỗi cột, bạn có thể chuyển đổi kết quả phép nhân thành một chuỗi và sử dụng phương pháp để buộc chiều rộng giống nhau

Đây là giao diện của nó trong mã

for i in range(1, 11):
    for j in range(1, 11):
        print(f"{i * j}".ljust(3), end=" ")
    print()

đầu ra

1   2   3   4   5   6   7   8   9   10  
2   4   6   8   10  12  14  16  18  20  
3   6   9   12  15  18  21  24  27  30  
4   8   12  16  20  24  28  32  36  40  
5   10  15  20  25  30  35  40  45  50  
6   12  18  24  30  36  42  48  54  60  
7   14  21  28  35  42  49  56  63  70  
8   16  24  32  40  48  56  64  72  80  
9   18  27  36  45  54  63  72  81  90  
10  20  30  40  50  60  70  80  90  100 

ví dụ 2. Vòng lặp While lồng nhau

Để hoàn thiện, hãy lặp lại ví dụ trên bằng cách sử dụng vòng lặp while lồng nhau. Mục đích của ví dụ này là để chứng minh rằng bạn cũng có thể đặt một vòng lặp while bên trong một vòng lặp khác

Đây là mã

i = 1
j = 1

while i <= 10:
    while j <= 10:
        print(i * j, end = " ")
        j += 1
    j = 1
    print()
    i += 1

đầu ra

1 2 3 4 5 6 7 8 9 10 
2 4 6 8 10 12 14 16 18 20 
3 6 9 12 15 18 21 24 27 30 
4 8 12 16 20 24 28 32 36 40 
5 10 15 20 25 30 35 40 45 50 
6 12 18 24 30 36 42 48 54 60 
7 14 21 28 35 42 49 56 63 70 
8 16 24 32 40 48 56 64 72 80 
9 18 27 36 45 54 63 72 81 90 
10 20 30 40 50 60 70 80 90 100 

Dưới đây là hình minh họa các phần của vòng lặp lồng nhau ở trên

Làm cách nào để kiểm soát luồng của vòng lặp lồng nhau?

Trong Python, bạn có thể điều khiển luồng hoặc vòng lặp. Hai câu lệnh luồng điều khiển chính trong Python là

  1. nghỉ. Câu lệnh break thoát khỏi vòng lặp
  2. tiếp tục. Câu lệnh continue kết thúc lần lặp hiện tại của vòng lặp và chuyển sang bước tiếp theo

Hãy xem xét kỹ hơn cách các câu lệnh này hoạt động với các vòng lặp lồng nhau trong Python

Làm thế nào để phá vỡ một vòng lặp lồng nhau?

Trong Python, bạn có thể sử dụng câu lệnh break để thoát khỏi vòng lặp. Điều này hữu ích nếu không có lý do gì để tiếp tục lặp. Ví dụ: nếu bạn đang sử dụng vòng lặp để tìm giá trị mục tiêu, thì khi tìm thấy mục tiêu, vòng lặp sẽ dừng lại

Hãy xem một ví dụ đơn giản về hoạt động của câu lệnh break

target = 3

for number in range(10):
    print(number)
    if number == target:
        break

đầu ra

________số 8

Tại đây, vòng lặp kết thúc khi số lần lặp là 3, là số mục tiêu

Trong một vòng lặp lồng nhau, câu lệnh break thoát khỏi vòng lặp bên trong nhưng vẫn tiếp tục chạy vòng lặp bên ngoài. Vì vậy, nếu bạn gọi câu lệnh break trong vòng lặp bên trong của cấu trúc vòng lặp lồng nhau, nó sẽ không dừng toàn bộ vòng lặp mà chỉ dừng vòng lặp bên trong

Chẳng hạn, hãy in một nửa hình chóp gồm các dấu hoa thị sao cho số dấu hoa thị là số hàng trong hình được đọc từ trên xuống dưới

for i in range(1, 11):
    for j in range(1, 11):
        if j - i > 0:
            break
        print("*", end=" ")
    print()

đầu ra

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
0

Trong một vòng lặp lồng nhau như thế này, bạn có thể coi i là số hàng và j là số cột

Ở đây câu lệnh break thoát khỏi vòng lặp bên trong nếu j – i nhỏ hơn 0. Nói cách khác, bạn ngừng chạy vòng lặp bên trong nếu số sao (*) lớn hơn số hàng

Đọc thêm về cách kiểm soát luồng của vòng lặp bằng cách sử dụng

Làm cách nào để tiếp tục một vòng lặp lồng nhau?

Trong Python, câu lệnh continue cho phép bạn bỏ qua “phần còn lại” của vòng lặp và bắt đầu vòng lặp tiếp theo

Câu lệnh này không kết thúc toàn bộ vòng lặp mà chỉ kết thúc vòng lặp hiện tại. Câu lệnh continue rất hữu ích nếu không có lý do gì để tiếp tục lặp lại vòng lặp hiện tại. Ví dụ: nếu bạn chỉ muốn thực hiện các hành động dựa trên một điều kiện, bạn có thể sử dụng câu lệnh tiếp tục để bỏ qua các hành động

Bạn có thể sử dụng câu lệnh continue trong một vòng lặp lồng nhau giống như bạn sẽ sử dụng nó trên một vòng lặp đơn

  1. Nếu bạn gọi câu lệnh continue trong vòng lặp bên trong, lần lặp hiện tại sẽ dừng và lần lặp tiếp theo của vòng lặp bên trong sẽ bắt đầu
  2. Nếu bạn gọi câu lệnh continue trước vòng lặp bên trong trong thân vòng lặp bên ngoài, thì lần lặp của vòng lặp bên ngoài sẽ chuyển sang lần lặp tiếp theo bằng cách bỏ qua vòng lặp bên trong

Chẳng hạn, hãy in một nửa kim tự tháp đảo ngược gồm các dấu sao sao cho số dấu hoa thị là số hàng trong hình được đọc từ dưới lên trên

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
1

đầu ra

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
2

Ở đây câu lệnh continue chuyển vòng lặp bên trong sang lần lặp tiếp theo nếu i + j lớn hơn 11. Nói cách khác, vòng lặp bên trong bỏ qua việc in dấu sao (*) nếu số hàng cộng với số cột lớn hơn 11

Dù sao, vấn đề là chứng minh cách hoạt động của câu lệnh continue trong một vòng lặp lồng nhau hơn là tập trung vào các chi tiết của hình dạng. Tuy nhiên, vui lòng chơi với ví dụ trong trình chỉnh sửa mã của bạn

Các vòng lặp lồng nhau một lớp với khả năng hiểu danh sách

Trong Python, bạn có thể làm cho vòng lặp for nhỏ gọn hơn bằng cách sử dụng. Điều này cho phép biểu thức một dòng gọn gàng hơn là mở rộng vòng lặp trên nhiều dòng mã

Tương tự như cách bạn có thể tạo vòng lặp for lồng nhau, bạn có thể tạo cách hiểu danh sách lồng nhau

Việc nén các vòng lặp bằng cách sử dụng khả năng hiểu có hợp lý hay không vẫn còn là vấn đề tranh luận. Một số người cho rằng nó làm cho mã gọn hơn và dễ đọc hơn. Những người khác nói rằng nó chỉ làm cho mã phức tạp hơn. Nếu bạn tạo một cách hiểu danh sách lồng nhau, hãy cẩn thận. Chất lượng mã có thể bị ảnh hưởng do biểu thức dài dòng và không thể đọc được. Đảm bảo chỉ thực hiện việc hiểu danh sách nếu nó cải thiện chất lượng mã

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
3

đầu ra

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
4

Làm cách nào để biến vòng lặp lồng nhau thành hiểu danh sách?

Trong phần trước, bạn đã thấy một ví dụ về cách tạo một danh sách lồng nhau từ một vòng lặp for lồng nhau. Nhưng từ ví dụ trên, không rõ bạn thực sự làm điều đó như thế nào

Đây là kế hoạch chi tiết để tạo khả năng hiểu danh sách lồng nhau từ các vòng lặp for lồng nhau

for i in range(1, 11):
    for j in range(1, 11):
        print(i * j, end=" ")
    print()
5

Thứ tự hiểu có thể làm bạn bối rối vì vòng lặp bên ngoài xảy ra ở “phần bên trong” của việc hiểu và vòng lặp bên trong nằm ở “phần bên ngoài”. Ngoài ra, không có nhiều điều xảy ra trong quá trình chuyển đổi

Tuy nhiên, nếu bạn không quen với việc hiểu danh sách, bạn nên đọc một bài viết riêng về chủ đề này

Ví dụ: đây là minh họa chuyển đổi vòng lặp for lồng nhau thành cách hiểu danh sách lồng nhau

Converting a nested loop into a nested list comprehension in Python

Tóm lược

Hôm nay bạn đã học cách vòng lặp lồng nhau hoạt động trong Python

Về nhà, một vòng lặp lồng nhau đề cập đến một vòng lặp bên trong một vòng lặp. Có thể có bao nhiêu vòng lặp trong một vòng lặp tùy thích

Các vòng lặp lồng nhau thường thực tế khi làm việc với dữ liệu đa chiều, chẳng hạn như danh sách các danh sách hoặc bảng dữ liệu

Như một tốc ký, bạn có thể nén các vòng lặp lồng nhau thành cách hiểu danh sách lồng nhau. Hãy cẩn thận khi làm điều này để không làm cho mã khó đọc hơn

Vòng lặp lồng nhau trong Python là gì?

Trả lời 1. Một vòng lặp lồng nhau đề cập đến một vòng lặp bên trong một vòng lặp, một vòng lặp bên trong phần thân của một vòng lặp bên ngoài . Hơn nữa, lần vượt qua đầu tiên của vòng lặp bên ngoài sẽ kích hoạt vòng lặp bên trong, vòng lặp này sẽ thực thi cho đến khi hoàn thành. Sau đó, lần thứ hai của vòng lặp bên ngoài sẽ kích hoạt lại vòng lặp bên trong.

Vòng lặp lồng nhau với ví dụ là gì?

Nếu một vòng lặp tồn tại bên trong phần thân của một vòng lặp khác thì đó được gọi là vòng lặp lồng nhau. Đây là một ví dụ về vòng lặp for lồng nhau. // vòng lặp ngoài for (int i = 1; i

Vòng lặp lồng nhau được sử dụng ở đâu?

Một vòng lặp lồng nhau có một vòng lặp bên trong vòng lặp khác. Chúng thường được sử dụng để làm việc với hai chiều, chẳng hạn như in dấu sao trong hàng và cột như minh họa bên dưới. Khi một vòng lặp được lồng vào bên trong một vòng lặp khác, vòng lặp bên trong sẽ chạy nhiều lần bên trong vòng lặp bên ngoài.

Tại sao chúng ta sử dụng vòng lặp for lồng nhau?

Vòng lặp lồng nhau hữu ích khi với mỗi lần đi qua vòng lặp bên ngoài, bạn cần lặp lại một số thao tác trên dữ liệu ở vòng lặp bên ngoài . Ví dụ: bạn đọc từng dòng của một tệp và đối với mỗi dòng, bạn phải đếm xem từ “the” được tìm thấy bao nhiêu lần.