Hướng dẫn python break inner loop only - python break bên trong chỉ vòng lặp

Không thanh lịch như nó phải

Ảnh của Johannes Plenio trên unplash

Chúng ta đều biết rằng Python là một ngôn ngữ lập trình thanh lịch. Nhưng mọi thứ đều có điểm yếu. Đôi khi Python không thanh lịch như nó phải như vậy.

Ví dụ, khi chúng ta cần thoát ra khỏi các vòng lặp lồng nhau như sau:

for a in list_a:
for b in list_b:
if condition(a,b)…

Tôi có hai tệp được chọn theo tab và tôi cần kiểm tra từng hàng trong tệp đầu tiên so với tất cả các hàng trong tệp khác. Ví dụ,

file1:

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C

file2:

row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563

Giả sử tôi muốn xuất tất cả các hàng trong (file1) mà col [3] của File1 nhỏ hơn bất kỳ (không phải mọi) col [2] của File2, cho rằng col [1] là như nhau.

Đầu ra dự kiến:

row1 c1 36 345 A row2 c3 36 9949 B

Vì tôi đang làm việc ở Ubuntu, tôi muốn lệnh đầu vào trông như thế này: row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 9
row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 9

Tôi đã viết mã sau:

import sys filename1 = sys.argv[1] filename2 = sys.argv[2] file1 = open(filename1, 'r') file2 = open(filename2, 'r') done = False for x in file1.readlines(): col = x.strip().split() for y in file2.readlines(): col2 = y.strip().split() if col[1] == col2[1] and col[3] < col2[2]: done = True break else: continue print x

Tuy nhiên, đầu ra trông như thế này:

row2 c3 36 9949 B

Điều này thể hiện rõ đối với các bộ dữ liệu lớn hơn, nhưng về cơ bản tôi luôn nhận được hàng cuối cùng mà điều kiện trong vòng lặp lồng nhau là đúng. Tôi nghi ngờ rằng "phá vỡ" đang phá vỡ tôi ra khỏi cả hai vòng. Tôi muốn biết (1) làm thế nào để thoát ra khỏi một trong các vòng lặp và (2) nếu đây là vấn đề duy nhất tôi gặp phải ở đây.

Bài viết này mô tả cách thoát ra khỏi các vòng lặp lồng nhau trong Python.

  • Cách viết các vòng lồng nhau trong Python
  • Thoát khỏi các vòng lặp lồng nhau với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 0 và row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 1
  • Thoát ra khỏi các vòng lồng nhau với một biến cờ
  • Tránh các vòng lặp lồng với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2
  • So sánh tốc độ

Kết quả của việc đo thời gian thực hiện của mỗi cách với lệnh ma thuật row2 c3 36 9949 B 7 của máy tính xách tay Jupyter được hiển thị. Lưu ý rằng nó không thể được đo nếu được thực thi dưới dạng mã Python.

  • Đo thời gian thực hiện với thời gian trong Python

Cách viết các vòng lồng nhau trong Python

Thoát khỏi các vòng lặp lồng nhau với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 0 và row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 1

l1 = [1, 2, 3] l2 = [10, 20, 30] for i in l1: for j in l2: print(i, j) # 1 10 # 1 20 # 1 30 # 2 10 # 2 20 # 2 30 # 3 10 # 3 20 # 3 30

Thoát ra khỏi các vòng lồng nhau với một biến cờ

for i in l1: for j in l2: print(i, j) if i == 2 and j == 20 : print('BREAK') break # 1 10 # 1 20 # 1 30 # 2 10 # 2 20 # BREAK # 3 10 # 3 20 # 3 30

Thoát khỏi các vòng lặp lồng nhau với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 0 và row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 1

Thoát ra khỏi các vòng lồng nhau với một biến cờ

  • Đo thời gian thực hiện với thời gian trong Python

Xin lưu ý rằng kết quả sẽ khác nhau tùy thuộc vào số lượng phần tử và số lượng vòng lặp row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 3 được lồng.

for i in l1: for j in l2: print(i, j) if i == 2 and j == 20: print('BREAK') break else: continue break # 1 10 # 1 20 # 1 30 # 2 10 # 2 20 # BREAK

Lấy một vòng ba với 100 yếu tố làm ví dụ.

for i in l1: print('Start outer loop') for j in l2: print('--', i, j) if i == 2 and j == 20: print('-- BREAK inner loop') break else: print('-- Finish inner loop without BREAK') continue print('BREAK outer loop') break # Start outer loop # -- 1 10 # -- 1 20 # -- 1 30 # -- Finish inner loop without BREAK # Start outer loop # -- 2 10 # -- 2 20 # -- BREAK inner loop # BREAK outer loop

Sử dụng row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 0, row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 1 và thêm các biến cờ gần tương đương và row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2 chậm.

Tuy nhiên, trong một số trường hợp, row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2 phù hợp hơn vì nó cải thiện khả năng đọc của mã ngay cả khi nó chậm. Bạn nên sử dụng nó tùy thuộc vào tình huống.

Python có phá vỡ vòng lặp bên trong không?

Phá vỡ vòng bên trong chỉ bị phá vỡ trong vòng lặp bên trong! Vòng ngoài tiếp tục chạy.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 0

Thoát ra khỏi các vòng lồng nhau với một biến cờ

Tránh các vòng lặp lồng với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2

Xem bài viết sau đây để biết cách sử dụng cơ bản của vòng lặp row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 3 trong Python.

cho vòng lặp trong Python (với phạm vi, liệt kê, zip, v.v.)

Double-loop:

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 1

Triple-loop:

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 2

Bạn có thể tránh các vòng lồng nhau với row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2.

  • Sản phẩm của Danh sách Cartesian trong Python (itertools.product)

Bạn có thể sử dụng row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2 để có được tất cả các kết hợp của nhiều danh sách trong một vòng lặp và nhận được kết quả tương tự như các vòng lặp lồng nhau.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 3

Vì nó là một vòng lặp duy nhất, bạn chỉ có thể row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 4 trong các điều kiện mong muốn.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 4

Thêm đối số của row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2, bạn có thể thực hiện quy trình tương ứng với nhiều vòng lặp hơn.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 5

Ghi chú

Trong row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2, quá trình cho phần tử luôn được thực hiện cho tất cả các kết hợp.

Trong ví dụ sau, phép nhân được thực hiện 9 lần cho cả row2 c3 36 9949 B 4 và row2 c3 36 9949 B 5.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 6

Trong trường hợp các vòng lặp lồng nhau, quá trình cho vòng lặp bên ngoài được thực hiện bởi số lượng các phần tử bên ngoài.

Trong ví dụ sau, phép nhân cho biến row2 c3 36 9949 B 4 chỉ là 3 lần.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 7

So sánh tốc độ

Kết quả của việc đo thời gian thực hiện của mỗi cách với lệnh ma thuật row2 c3 36 9949 B 7 của máy tính xách tay Jupyter được hiển thị. Lưu ý rằng nó không thể được đo nếu được thực thi dưới dạng mã Python.

  • Đo thời gian thực hiện với thời gian trong Python

Xin lưu ý rằng kết quả sẽ khác nhau tùy thuộc vào số lượng phần tử và số lượng vòng lặp row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 3 được lồng.

Lấy một vòng ba với 100 yếu tố làm ví dụ.

row1 c1 36 345 A row2 c3 36 9949 B row3 c4 36 858 C 8

Sử dụng row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 0, row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 1 và thêm các biến cờ gần tương đương và row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2 chậm.

Tuy nhiên, trong một số trường hợp, row1 c1 3455 3800 row2 c3 6784 7843 row3 c3 10564 99302 row4 c5 1405 1563 2 phù hợp hơn vì nó cải thiện khả năng đọc của mã ngay cả khi nó chậm. Bạn nên sử dụng nó tùy thuộc vào tình huống.

Python có phá vỡ vòng lặp bên trong không?

Phá vỡ vòng bên trong chỉ bị phá vỡ trong vòng lặp bên trong!Vòng ngoài tiếp tục chạy.only breaks out of the inner loop! The outer loop continues to run.

Làm thế nào để bạn phá vỡ một vòng lặp bên trong trong Python?

Phương pháp 3: Sử dụng biến cờ Khối Nếu phải kiểm tra giá trị của biến cờ và chứa câu lệnh break.Nếu biến cờ là đúng, thì khối nếu khối sẽ được thực thi và cũng sẽ thoát ra khỏi vòng lặp bên trong.Khác, vòng ngoài sẽ tiếp tục.Using a flag variable The if block must check the value of the flag variable and contain a break statement. If the flag variable is True, then the if block will be executed and will break out of the inner loop also. Else, the outer loop will continue.

Làm thế nào để bạn phá vỡ một vòng lặp bên trong?

Bạn đã thấy rằng cách bạn có thể sử dụng nhãn với câu lệnh Break để chấm dứt vòng lặp bên ngoài từ vòng lặp bên trong, nhưng bạn có thể làm tốt hơn nhiều với việc đóng gói vòng lặp trong một phương thức và sau đó sử dụng câu lệnh trả về để phá vỡ một vòng lặp lồng nhau.Bạn cũng có thể sử dụng một nhãn với một câu lệnh tiếp tục.use the label with a break statement to terminate the outer loop from the inner loop, but you can do much better with encapsulating the loop in a method and then using a return statement to break from a nested loop. You can also use a label with a continue statement as well.

Break có kết thúc tất cả các vòng lặp python không?

Tuyên bố phá vỡ Python ngay lập tức chấm dứt hoàn toàn một vòng lặp..

Chủ đề