Vòng lặp qua nhiều danh sách
Tín dụng: Andy McKay
Vấn đề
Bạn cần phải lặp qua mọi mục của nhiều danh sách.
Dung dịch
Về cơ bản có ba cách tiếp cận. Nói bạn có:
a = ['a1', 'a2', 'a3'] b = ['b1', 'b2']
Sử dụng chức năng tích hợp
print "Map:" for x, y in map[None, a, b]: print x, y2, với đối số đầu tiên là
print "Map:" for x, y in map[None, a, b]: print x, y3, bạn có thể lặp lại trên cả hai danh sách song song:
print "Map:" for x, y in map[None, a, b]: print x, y
Các vòng lặp chạy ba lần. Trên lần lặp cuối cùng,
print "Map:" for x, y in map[None, a, b]: print x, y4 sẽ là
print "Map:" for x, y in map[None, a, b]: print x, y3.
Sử dụng chức năng tích hợp
print "Map:" for x, y in map[None, a, b]: print x, y6 cũng cho phép bạn lặp lại song song:
print "Zip:" for x, y in zip[a, b]: print x, y
Vòng lặp chạy hai lần; Việc lặp thứ ba chỉ đơn giản là không được thực hiện.
Danh sách hiểu biết có một lần lặp rất khác nhau:
print "List comprehension:" for x, y in [[x,y] for x in a for y in b]: print x, y
Vòng lặp chạy sáu lần, trên mỗi mục của
print "Map:" for x, y in map[None, a, b]: print x, y7 cho mỗi mục của
print "Map:" for x, y in map[None, a, b]: print x, y8.
Thảo luận
Sử dụng
print "Map:" for x, y in map[None, a, b]: print x, y2 với
print "Map:" for x, y in map[None, a, b]: print x, y3 làm đối số đầu tiên là một biến thể tinh tế của cuộc gọi
print "Map:" for x, y in map[None, a, b]: print x, y2 tiêu chuẩn, thường có chức năng là đối số đầu tiên. Như tài liệu chỉ ra, nếu đối số đầu tiên là
print "Map:" for x, y in map[None, a, b]: print x, y3, hàm nhận dạng được sử dụng làm hàm mà qua đó các đối số được ánh xạ. Nếu có nhiều đối số danh sách,
print "Map:" for x, y in map[None, a, b]: print x, y2 trả về một danh sách bao gồm các bộ dữ liệu chứa các mục tương ứng từ tất cả các danh sách [nói cách khác, thì đó là một loại hoạt động chuyển vị]. Các đối số danh sách có thể là bất kỳ loại trình tự nào và kết quả luôn là một danh sách.
Lưu ý rằng kỹ thuật đầu tiên trả về
print "Map:" for x, y in map[None, a, b]: print x, y3 cho các chuỗi trong đó không có thêm các yếu tố. Do đó, đầu ra của vòng lặp đầu tiên là:
Map: a1 b1 a2 b2 a3 None
print "Map:" for x, y in map[None, a, b]: print x, y6 cho phép bạn lặp lại các danh sách theo cách tương tự, nhưng chỉ có số lượng các yếu tố của danh sách nhỏ nhất. Do đó, đầu ra của kỹ thuật thứ hai là:
Zip: a1 b1 a2 b2
Python 2.0 đã giới thiệu các toàn bộ danh sách, với một cú pháp mà một số tìm thấy một chút lạ:
[[x,y] for x in a for y in b]
Điều này lặp lại trong danh sách
print "Map:" for x, y in map[None, a, b]: print x, y7 cho mọi yếu tố trong
print "Map:" for x, y in map[None, a, b]: print x, y8. Các yếu tố này được đưa vào một tuple
print "Zip:" for x, y in zip[a, b]: print x, y8
print "Zip:" for x, y in zip[a, b]: print x, y9. Sau đó, chúng tôi lặp lại thông qua danh sách kết quả của các bộ dữ liệu trong vòng lặp
print "List comprehension:" for x, y in [[x,y] for x in a for y in b]: print x, y0 ngoài cùng. Do đó, đầu ra của kỹ thuật thứ ba khá khác nhau:
List comprehension: a1 b1 a1 b2 a2 b1 a2 b2 a3 b1 a3 b2
Xem thêm
Phần tham chiếu thư viện về các loại trình tự; Tài liệu cho các tích hợp
print "Map:" for x, y in map[None, a, b]: print x, y6 và
print "Map:" for x, y in map[None, a, b]: print x, y2 trong tham chiếu thư viện.Library Reference section on sequence types; documentation for the
print "Map:" for x, y in map[None, a, b]: print x, y6 and
print "Map:" for x, y in map[None, a, b]: print x, y2 built-ins in the Library Reference.
Giả sử tôi có hai hoặc nhiều danh sách có cùng độ dài. Một cách tốt để lặp lại thông qua chúng là gì?
print "Map:" for x, y in map[None, a, b]: print x, y8,
print "Map:" for x, y in map[None, a, b]: print x, y7 là danh sách.
for i, ele in enumerate[a]:
print ele, b[i]
hoặc
for i in range[len[a]]:
print a[i], b[i]
Hoặc có bất kỳ biến thể tôi đang thiếu?
Có bất kỳ lợi thế cụ thể của việc sử dụng cái này hơn?
nbro
14.4K27 Huy hiệu vàng104 Huy hiệu bạc188 Huy hiệu đồng27 gold badges104 silver badges188 bronze badges
hỏi ngày 9 tháng 4 năm 2012 lúc 21:55Apr 9, 2012 at 21:55
0
Cách thông thường là sử dụng
print "List comprehension:" for x, y in [[x,y] for x in a for y in b]: print x, y5:
print "Map:" for x, y in map[None, a, b]: print x, y0
Điều này sẽ dừng khi ngắn hơn của hai lần lặp
print "Map:" for x, y in map[None, a, b]: print x, y8 và
print "Map:" for x, y in map[None, a, b]: print x, y7 đã cạn kiệt. Cũng đáng chú ý:
print "List comprehension:" for x, y in [[x,y] for x in a for y in b]: print x, y8 [chỉ Python 2] và
print "List comprehension:" for x, y in [[x,y] for x in a for y in b]: print x, y9 [
Map: a1 b1 a2 b2 a3 None0 trong Python 3].
Đã trả lời ngày 9 tháng 4 năm 2012 lúc 21:55Apr 9, 2012 at 21:55
Sven Marnachsven MarnachSven Marnach
548K114 Huy hiệu vàng919 Huy hiệu bạc821 Huy hiệu đồng114 gold badges919 silver badges821 bronze badges
4
Bạn có thể sử dụng
print "Map:" for x, y in map[None, a, b]: print x, y6:
print "Map:" for x, y in map[None, a, b]: print x, y1
Đã trả lời ngày 9 tháng 4 năm 2012 lúc 21:57Apr 9, 2012 at 21:57