Hướng dẫn double for loop in python list comprehension - vòng lặp double for trong hiểu danh sách python

Technic bộ nhớ này giúp tôi rất nhiều:

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
1

Và bây giờ bạn có thể nghĩ về trả về + vòng lặp bên ngoài là thứ tự đúngReturn + Outer-loop as the only Right Order

Biết ở trên, thứ tự trong danh sách toàn diện ngay cả đối với 3 vòng có vẻ dễ dàng:


c=[111, 222, 333]
b=[11, 22, 33]
a=[1, 2, 3]

print(
  [
    (i, j, k)                            #  
    for i in a for j in b for k in c     # in order: loop1, loop2, loop3
    if i < 2 and j < 20 and k < 200      # 
  ]
)
[(1, 11, 111)]

bởi vì những điều trên chỉ là:

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST

Để lặp lại một danh sách/cấu trúc lồng nhau, Technic là như nhau: đối với

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
2 từ câu hỏi:

a = [[1,2],[3,4]]
[i2    for i1 in a      for i2 in i1]
which return [1, 2, 3, 4]

cho một cấp độ khác nhau

a = [[[1, 2], [3, 4]], [[5, 6], [7, 8, 9]], [[10]]]
[i3    for i1 in a      for i2 in i1     for i3 in i2]
which return [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

và như thế

Đơn giản thực hiện vòng lặp ngoài cùng xuất hiện trước, và sau đó các vòng bên trong sau đó để có được danh sách hiểu đôi cho vòng lặp trong Python.

Sự hiểu biết danh sách nên như thế này:

[x for b in a for x in b]

Mã ví dụ đơn giản.

list1 = [(x, y) for x in range(0, 3) for y in range(0, 1)]

print(list1)

Output::

Hướng dẫn double for loop in python list comprehension - vòng lặp double for trong hiểu danh sách python

Một vi dụ khac

z = [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]]
res = [x for y in z if sum(y) > 10 for x in y if x < 10]

print(res)

Đầu ra: [5, 6, 7, 8, 9]: [5, 6, 7, 8, 9]

Làm thế nào để thực hiện một lần lặp gấp đôi với danh sách hiểu trong Python?

Trả lời: Sử dụng danh sách hiểu để thực hiện lặp lại gấp đôi.: Use a list comprehension to do a double iteration.

text = [["Hello", "World!"], ["Whats", "Up!"]]

res = [word for words in text for word in words]

print(res)

Đầu ra: [‘Xin chào,‘ Thế giới!: [‘Hello’, ‘World!’, ‘Whats’, ‘Up!’]

Hãy bình luận nếu bạn có bất kỳ nghi ngờ và đề xuất nào về chủ đề vòng lặp danh sách Python này.

Lưu ý: IDE: & NBSP; Pycharm & NBSP; 2021.3.3 (Phiên bản cộng đồng) IDE: PyCharm 2021.3.3 (Community Edition)

Windows 10

Python 3.10.1

Tất cả & nbsp; ví dụ python & nbsp; là trong & nbsp; Python & nbsp; 3, vì vậy có thể khác với các phiên bản Python 2 hoặc nâng cấp. Python Examples are in Python 3, so Maybe its different from python 2 or upgraded versions.

Hướng dẫn double for loop in python list comprehension - vòng lặp double for trong hiểu danh sách python

Bằng cấp về Khoa học máy tính và Kỹ sư: Nhà phát triển ứng dụng và có nhiều ngôn ngữ lập trình kinh nghiệm. Sự nhiệt tình cho công nghệ và thích học kỹ thuật.

Khi bạn học một ngôn ngữ lập trình mới, nó rất khó để tìm ra cách giữ cho mã của bạn rõ ràng.

Một trong những cách tốt nhất để làm cho mã Python dễ tiếp cận hơn với các đồng nghiệp của bạn đến từ việc thu gọn nhiều dòng mã thành một dòng. Trong một bài viết gần đây, tôi đã chỉ cho bạn cách thực hiện việc này bằng cách sử dụng toàn bộ danh sách. Bài viết này xây dựng cái đó, vì vậy bạn chắc chắn nên kiểm tra nó trước khi tiếp tục ở đây.

Hóa ra, bạn có thể làm tổ danh sách các toàn bộ trong danh sách khác để giảm thêm mã của bạn và giúp bạn dễ đọc hơn. Như một vấn đề thực tế, không có giới hạn nào đối với số lượng toàn bộ bạn có thể làm tổ trong nhau, điều này có thể viết mã rất phức tạp trong một dòng.

Vì đây là một chức năng mạnh mẽ như vậy, hãy để có một cái nhìn sâu sắc hơn.

Danh sách toàn diện Tạo một danh sách mới bằng cách quét tất cả các mục trong danh sách, kiểm tra xem chúng có đáp ứng một điều kiện không, truyền các giá trị làm và áp dụng một hàm cho chúng. Bạn có thể đặt một danh sách toàn bộ trong danh sách hiểu biết khác. Điều này tạo ra sự hiểu biết danh sách lồng nhau và đơn giản hóa hơn nữa mã của bạn.

Quay lại cơ bản về khả năng đọc của tập lệnh Python của bạn với 1 công cụ đơn giảnIncrease the Readability of Your Python Script With 1 Simple Tool

Nhanh chóng làm mới: Hiểu danh sách là gì?

Là một sự bồi dưỡng nhanh, một sự hiểu biết danh sách là một cách để tạo một danh sách mới bằng cách lọc các yếu tố trong danh sách đáp ứng một điều kiện, biến đổi các yếu tố như mong muốn và lưu trữ các giá trị mới trong danh sách. Tất cả những gì chúng ta cần là một dòng mã duy nhất. Mã như sau:

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
3

Mã đó sắp xếp thông qua từng giá trị trong tập dữ liệu của bạn, kiểm tra xem liệu nó có đáp ứng điều kiện không, áp dụng hàm đã nêu và lưu trữ nó trong danh sách có tên kết quả. Nó áp dụng một vòng lặp, nếu câu lệnh và một hàm tất cả trong một dòng.

Dưới đây, một ví dụ cho thấy cách thức danh sách có hoạt động:

Numbers = [1,2,3,4,5,6,7,8,9,10]
Result_ForLoop = []
for Number in Numbers:
   if Number > sum(Numbers)/len(Numbers):
       Result.append(Number)
Result_ListComprehension = []
Result_ListComprehension = [Number for Number in Numbers if Number > sum(Numbers)/len(Numbers)]
print(Result_ForLoop)
print(Result_ListComprehension)

Hai câu lệnh in sẽ hiển thị cùng một kết quả tương tự:

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
4.

Để thảo luận chi tiết hơn về cách hai đoạn mã đó trả về cùng một kết quả, hãy xem hướng dẫn của tôi để liệt kê các toàn bộ.

Bây giờ, hãy để Lặn lặn vào các toàn bộ danh sách lồng nhau.

Một danh sách lồng nhau hiểu được là gì?

Một danh sách lồng nhau hiểu được tăng gấp đôi về khái niệm toàn diện danh sách. Nó là một cách để kết hợp không chỉ một, mà còn nhiều cho các vòng lặp, nếu các câu lệnh và chức năng thành một dòng mã. Điều này trở nên hữu ích khi bạn có một danh sách các danh sách (thay vì chỉ một danh sách duy nhất).

Hãy để xem xét một ví dụ. Giả sử bạn có hai danh sách các số và bạn muốn trả lại bình phương của tất cả các số chẵn. Bạn có thể viết mã sau bằng cách hiểu danh sách duy nhất:

Numbers = [[1,2,3,4,5,6,7,8,9,10],
          [11,12,13,14,15,16,17,18,19,20]]
Result = []
for list in Numbers:
   Squares = [Number ** 2 for Number in list if Number % 2 == 0]
   Result.extend(Squares)

Mã trên:

  • Tạo tập dữ liệu đầu vào và lưu trữ nó theo số. Dữ liệu đầu vào bao gồm hai danh sách. Danh sách đầu tiên chạy từ một đến 10 và danh sách thứ hai chạy từ 11 đến 20.

  • Sau đó, mã tạo ra một danh sách trống gọi là kết quả. Chúng tôi sẽ sử dụng kết quả để lưu trữ đầu ra từ chức năng của chúng tôi.

  • Mã sau đó sẽ tạo một vòng lặp và lặp qua từng danh sách trong số.

  • Trong vòng lặp For, nó sử dụng danh sách hiểu để tìm kiếm thông qua danh sách được cung cấp, kiểm tra xem mỗi số trong danh sách có chia hết cho hai (nghĩa là có phải không?), Squares kết quả và lưu trữ nó trong danh sách. Danh sách này sau đó được lưu trữ trong các bình phương biến.

  • Dòng cuối cùng sau đó thêm hình vuông vào kết quả cung cấp cho chúng tôi một danh sách các hình vuông của các giá trị được chia cho hai.

Vì có hai danh sách trong các số nên nó thực thi vòng lặp hai lần.

Bây giờ, vì bạn đã quen thuộc với các toàn bộ danh sách, bạn có thể hiểu rằng nó hoàn toàn có thể xóa vòng lặp và nếu câu lệnh với sự hiểu biết danh sách. Làm như vậy tạo ra một danh sách lồng nhau hiểu.

Để làm điều này, chúng tôi viết một danh sách hiểu biết duy nhất với hai vòng cho các vòng lặp. Đó là chìa khóa để nhớ ba điều khi làm điều này:

  • Hàm luôn luôn là thuật ngữ đầu tiên.

  • Các vòng lặp luôn được viết theo thứ tự làm tổ.

  • Điều kiện luôn được đặt ở cuối.

Vì vậy, để xây dựng một vòng lặp lồng nhau trong ví dụ của chúng tôi, chúng tôi cần:

  • Viết hàm để vuông các số đã vượt qua bộ lọc.

  • Viết một vòng lặp lặp qua tất cả các danh sách trong các số.

  • Viết một vòng lặp lặp qua từng số trong danh sách truyền.

  • Viết một điều kiện vượt qua các số chẵn.

Và chúng ta cần phải làm điều đó theo thứ tự đó. May mắn thay, một khi chúng tôi đã tạo ra cấu trúc đó trong tâm trí của chúng tôi, nó rất dễ thực hiện. Mã xuất hiện như sau:

for i in a:                         # outer loop1 GOES SECOND
  for j in b:                       # inner loop2 GOES THIRD
    for k in c:                     # inner loop3 GOES FOURTH
      if i < 2 and j < 20 and k < 200:
        print((i, j, k))            # returned value GOES FIRST
0

Nếu bạn thay thế mã trước đó, bạn sẽ tìm thấy danh sách lồng nhau này, sự hiểu biết danh sách này sẽ trả về cùng một kết quả.

Đây là một cách mạnh mẽ để giảm một số dòng mã thành một dòng và có thể tăng đáng kể khả năng đọc mã của bạn. Vì nó trong một dòng duy nhất, bất kỳ ai hiểu được sự hiểu biết danh sách sẽ có thể nhanh chóng suy ra những gì đang xảy ra và tuân theo logic của bạn.

Tìm hiểu thêm với Peter Grantneed để tự động hóa phân tích dữ liệu của bạn? Đây là cách mà.Need to Automate Your Data Analysis? Here’s How.

Trước khi bạn bắt đầu làm tổ ...

Mặc dù sự hiểu biết danh sách lồng nhau là một cách hữu ích để cải thiện khả năng đọc của mã của bạn, nhưng có một nhược điểm. Danh sách toàn diện có thể trở nên rất phức tạp rất nhanh chóng. Điều gì sẽ xảy ra nếu bạn có một trăm cho vòng lặp? Hoặc nếu bạn có mô tả chức năng và điều kiện rất phức tạp thì sao?

Tôi có thể hình dung một sự phức tạp được lồng cho vòng lặp trải dài một số dòng mã và trở nên gần như không thể đọc hoặc hiểu. Mặc dù có Python Python không có giới hạn kỹ thuật để hiểu phức tạp cho các vòng lặp, nhưng có một giới hạn của con người.

Nếu bạn có một đoạn mã phức tạp với nhiều vòng cho các vòng lặp hoặc các chức năng và điều kiện phức tạp, sử dụng một vòng lặp được lồng cho vòng lặp thực sự có thể khiến mã của bạn khó hiểu hơn. Hãy cẩn thận để đảm bảo những nỗ lực của bạn đang làm cho cộng tác viên của bạn sống dễ dàng hơn thay vì khó khăn hơn.

Nói chung, & nbsp; Nếu bạn có nhiều hơn ba cấp độ làm tổ, có thể dễ dàng hơn cho mọi người nếu bạn chỉ viết ra các vòng lặp.

Học cách làm cho mã dễ dàng cho người khác hiểu là một nhiệm vụ quan trọng trong nơi làm việc hiện đại, đặc biệt là ngày càng nhiều nhóm làm việc từ xa. Danh sách toàn diện và sự hiểu biết danh sách lồng nhau là một công cụ Python hữu ích để giúp cộng tác viên của bạn nhanh chóng hiểu được mã của bạn hoạt động như thế nào.

Bạn có thể làm danh sách kép hiểu trong Python không?

Hóa ra, bạn có thể làm tổ danh sách các toàn bộ trong danh sách khác để giảm thêm mã của bạn và giúp bạn dễ đọc hơn. Như một vấn đề thực tế, không có giới hạn về số lượng toàn bộ bạn có thể làm tổ trong nhau, điều này có thể viết mã rất phức tạp trong một dòng.you can nest list comprehensions within another list comprehension to further reduce your code and make it easier to read still. As a matter of fact, there's no limit to the number of comprehensions you can nest within each other, which makes it possible to write very complex code in a single line.

Bạn có thể thực hiện vòng lặp lồng nhau trong danh sách hiểu không?

Ngoài ra, chúng ta có thể thực hiện các lần lặp lại lồng nhau trong một danh sách hiểu.Trong phần này, chúng ta sẽ tìm thấy sự chuyển đổi của một ma trận bằng cách sử dụng một vòng lặp lồng nhau bên trong một danh sách hiểu.We can perform nested iterations inside a list comprehension. In this section, we are going to find the transpose of a matrix using a nested loop inside a list comprehension.

Cái nào nhanh hơn cho vòng lặp hoặc danh sách hiểu?

Danh sách toàn diện nhanh hơn các vòng lặp để tạo danh sách.Nhưng, điều này là do chúng tôi đang tạo một danh sách bằng cách nối thêm các yếu tố mới vào mỗi lần lặp. to create lists. But, this is because we are creating a list by appending new elements to it at each iteration.

Là danh sách hiểu tốt hơn so với Loop Python?

Do sự khác biệt trong cách Python thực hiện cho các vòng lặp và danh sách hiểu, các toàn bộ danh sách hầu như luôn luôn nhanh hơn so với các vòng lặp khi thực hiện các hoạt động.Dưới đây, hoạt động tương tự được thực hiện bằng cách hiểu danh sách và cho Loop.list comprehensions are almost always faster than for loops when performing operations. Below, the same operation is performed by list comprehension and by for loop.