Nguồn thông tin tốt nhất là hướng dẫn Python chính thức về hiểu danh sách . Khả năng hiểu danh sách gần giống như vòng lặp for (chắc chắn bất kỳ cách hiểu danh sách nào cũng có thể được viết dưới dạng vòng lặp for) nhưng chúng thường nhanh hơn so với sử dụng vòng lặp for.
Xem phần đọc hiểu danh sách dài hơn này từ hướng dẫn ( if
phần lọc phần đọc hiểu, chỉ những phần vượt qua câu lệnh if mới được chuyển vào phần cuối cùng của phần đọc hiểu danh sách (tại đây (x,y)
):
>>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
Nó hoàn toàn giống với vòng lặp for lồng nhau này (và, như hướng dẫn đã nói, hãy lưu ý thứ tự của for và if giống nhau).
>>> combs = []
>>> for x in [1,2,3]:
... for y in [3,1,4]:
... if x != y:
... combs.append((x, y))
...
>>> combs
[(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]
Sự khác biệt chính giữa khả năng hiểu danh sách và vòng lặp for là phần cuối cùng của vòng lặp for (nơi bạn làm việc gì đó) xuất hiện ở đầu chứ không phải ở cuối.
Về câu hỏi của bạn:
Đối tượng phải là kiểu gì để sử dụng cấu trúc vòng lặp for này?
Có thể lặp lại . Bất kỳ đối tượng nào có thể tạo ra một tập hợp phần tử (hữu hạn). Chúng bao gồm bất kỳ vùng chứa, danh sách, bộ, trình tạo, v.v.
Thứ tự mà i và j được gán cho các phần tử trong đối tượng là gì?
Chúng được chỉ định theo thứ tự chính xác khi chúng được tạo từ mỗi danh sách, như thể chúng nằm trong vòng lặp for lồng nhau (đối với lần đọc đầu tiên của bạn, bạn sẽ nhận được 1 phần tử cho i, sau đó mọi giá trị từ j, phần tử thứ 2 thành i, sau đó mọi giá trị từ j, v.v.)
Nó có thể được mô phỏng bằng một cấu trúc vòng lặp for khác không?
Có, đã được hiển thị ở trên.
Vòng lặp for này có thể được lồng với một cấu trúc tương tự hay khác với vòng lặp for? Và nó sẽ trông như thế nào?
Chắc chắn, nhưng nó không phải là một ý tưởng tuyệt vời. Ví dụ ở đây, cung cấp cho bạn một danh sách các ký tự:
[[ch for ch in word] for word in ("apple", "banana", "pear", "the", "hello")]