2016-10-01 5 views
2

나는 다음과 같은 문제가있다. 예를 들어다른 목록의 제품을 반복하는 방법은 무엇입니까? 나는 또한 같은 방법으로 두 번째 목록 <code>l2</code>를 포함하려면,</p> <p>나는 목록 <code>l1</code>을 가지고 있고이 기능 <code>itertools.product</code>으로 제품을 반복 할 :

:

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) 

나는 적절한 솔루션을 위해 - 루프 결합하는 것이라고 알고 있습니다. 그러나 그것은 내가 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'))