2012-02-22 29 views
8

Hiện nay tôi sẽ làm gì:Python kết hợp hai cho vòng

for x in [1,2,3]: 
    for y in [1,2,3] 
     print x,y 

Có cách làm một cái gì đó giống như

for x,y in ([1,2,3],[1,2,3]): 
    print x,y 

có muốn rút ngắn loại vòng lặp và điều này ném "quá nhiều để giải nén "ngoại lệ.

Trả lời

15

Sử dụng itertools.product

import itertools 
for x, y in itertools.product([1,2,3], [1,2,3]): 
    print x, y 

in tất cả chín cặp:

1 1 
1 2 
1 3 
2 1 
2 2 
2 3 
3 1 
3 2 
3 3 

CẬP NHẬT: Nếu hai biến xy sẽ được lựa chọn từ một danh sách, bạn có thể sử dụng từ khóa repeat (như được đề xuất bởi agf):

import itertools 
for x, y in itertools.product([1,2,3], repeat=2): 
    print x, y 
+6

hoặc 'sản phẩm ([1, 2, 3], lặp lại = 2)'. – agf

+0

@agf: cảm ơn! Tôi luôn sử dụng 'sản phẩm (** [1,2,3] * 2)'. Tôi vẫn có thể sử dụng phương pháp của tôi vì nó rõ ràng hơn, nhưng 'repeat = ...' có thể dễ đọc hơn. – ninjagecko

+0

@ninjagecko Tôi giả sử bạn có nghĩa là 'sản phẩm (* [[1,2,3]] * 2)', nhưng tôi không thấy điều đó rõ ràng hơn. Như bạn đã thấy, nó cũng dễ dàng hơn để có được sai. Tự quảng cáo không biết xấu hổ: Xem câu trả lời được đánh giá cao của tôi về [Cách tốt nhất để tạo ra tất cả các chuỗi ba chữ cái có thể là gì?] (Http://stackoverflow.com/a/7074066/500584) – agf

7

Bạn có thể sử dụng một biểu thức máy phát điện trong vòng lặp for:

for x, y in ((a,b) for a in [1,2,3] for b in [5,6,7]): 
    print x, y