2016-10-01 9 views
2

私は次のような問題があります。異なるリストの製品をどのように反復処理しますか?

私はリストl1を持っていると私は機能itertools.productで製品を反復処理したいが、私も同じように第二のリストl2を含めたいです。例えば

l1 = [1, 2, 3, 4] 
l2 = ['a', 'b', 'c', 'd'] 
for i in list(itertools.product(l1, repeat = 2)): 
    print(i) 

出力は次のようになります。

(1, 1) 
(1, 2) 
... 

私は、これは非常に明確だと思います。しかし、どのように私はこのような出力を第二のリストが含まれており、取得するために管理することができます。

(1, a),(1, a) 
(1, a),(2, b) 
(1, a),(3, c) 
(1, a),(4, d) 

(2, b),(1, a) 
(2, b),(2, b) 
(2, b),(3, c) 
(2, b),(4, d) 

(3, c),(1, a) 
(3, c),(2, b) 
(3, c),(3, c) 
(3, c),(4, d) 

(4, d),(1, a) 
(4, d),(2, b) 
(4, d),(3, c) 
(4, d),(4, d) 

私は適切な解決策は、forループ組み合わせることであろうことを知っています。しかし、私はrepeatカウンターを増やしたいので、それは私には合いません。 productにリストのzipを提供することにより

答えて

3

list

for i in product(zip(l1,l2), repeat = 2): 
    print(i) 

ラッピングはループがあなたのためのイテレータにnextを呼び出すの世話をするために、必要とされていません。

あなたはすべての4つの組み合わせのための新たなラインをしたい場合は、(1から始まる)enumerateを使用して、追加\nc % 40のとき:

for c, i in enumerate(product(zip(l1,l2), repeat = 2), 1): 
    print(i, '\n' if c % 4 == 0 else '') 

出力:

((1, 'a'), (1, 'a')) 
((1, 'a'), (2, 'b')) 
((1, 'a'), (3, 'c')) 
((1, 'a'), (4, 'd')) 

((2, 'b'), (1, 'a')) 
((2, 'b'), (2, 'b')) 
((2, 'b'), (3, 'c')) 
((2, 'b'), (4, 'd')) 

((3, 'c'), (1, 'a')) 
((3, 'c'), (2, 'b')) 
((3, 'c'), (3, 'c')) 
((3, 'c'), (4, 'd')) 

((4, 'd'), (1, 'a')) 
((4, 'd'), (2, 'b')) 
((4, 'd'), (3, 'c')) 
((4, 'd'), (4, 'd')) 
関連する問題