2017-10-29 16 views
0

은 정말 결과가 각 요소를 조합 한 스트링의리스트가 서로 소자와 결합 인 문자열3 개의 문자열 목록에있는 모든 요소 조합을 생성 하시겠습니까?</p> <pre><code>The girl wears a red sweater The boy wears a red sweater The girl touches a red sweater The boy touches a red sweater The girl wears a blue sweater The boy wears a yellow sweater (ETC...) </code></pre> <p>I :

list1 = ['The girl', 'The boy'] 
list2 = ['wears', 'touches', 'tries'] 
list3 = ['a red sweater', 'a blue sweater', 'a yellow sweater', 'a white sweater'] 

각 목록의 각 요소의 모든 가능한 조합을 생성 할 필요 모든 조합을 얻는 한 출력 순서는 특히 중요하지 않습니다.

제 연구에서 "순열"이 해결책이 될 것이라고 생각하지만 숫자 또는 각 문자 조합의 문자열 순열에 관한 여러 답변을 찾았습니다. 그런 것들은 내가 필요로하는 것이 아니다. 목록에 정렬 ​​된 텍스트 블록을 결합해야합니다.

각 문자열 목록에서 다른 요소의 모든 조합을 포함하는 긴 목록의 목록을 만들려면 어떻게해야합니까?

루프 것입니다 작품에 대해 당신에게 간단한의

답변

0

itertools의 제품을 사용하여, 그 단순하게 :

import itertools 
["{x} {y} {z}".format(x=x,y=y,z=z) for x,y,z in itertools.product(list1, list2, list3)] 

그리고 파이썬 3.6에서, 당신은 내가이 시도 format 전화

[f"{x} {y} {z}" for x,y,z in itertools.product(list1, list2, list3)] 
+0

우수하고 우아한 솔루션. 그것은 효과가 있었다. 고맙습니다! – skeitel

2

그냥 무리 감사드립니다. 트릭은 인쇄 순서 z,y,x입니다.

list1 = ['The girl', 'The boy'] 
list2 = ['wears', 'touches', 'tries'] 
list3 = ['a red sweater', 'a blue sweater', 'a yellow sweater', 'a white sweater'] 

for x in list3: 
    for y in list2: 
     for z in list1: 
      print (z,y,x) 

출력;

The girl wears a red sweater 
The boy wears a red sweater 
The girl touches a red sweater 
The boy touches a red sweater 
The girl tries a red sweater 
The boy tries a red sweater 
The girl wears a blue sweater 
The boy wears a blue sweater 
The girl touches a blue sweater 
The boy touches a blue sweater 
The girl tries a blue sweater 
The boy tries a blue sweater 
The girl wears a yellow sweater 
The boy wears a yellow sweater 
The girl touches a yellow sweater 
The boy touches a yellow sweater 
The girl tries a yellow sweater 
The boy tries a yellow sweater 
The girl wears a white sweater 
The boy wears a white sweater 
The girl touches a white sweater 
The boy touches a white sweater 
The girl tries a white sweater 
The boy tries a white sweater 
+0

을 삭제할 수 있지만, 도중에 혼란 스러웠습니다. 고맙습니다! – skeitel

1

카티 션 제품의 편리한 도구 itertools.product을 사용하십시오. 그런 다음 제품 join :

from itertools import product 
lst = [' '.join(p) for p in product(list1, list2, list3)] 

from pprint import pprint 
pprint(lst) 
['The girl wears a red sweater', 
'The girl wears a blue sweater', 
'The girl wears a yellow sweater', 
'The girl wears a white sweater', 
'The girl touches a red sweater', 
'The girl touches a blue sweater', 
'The girl touches a yellow sweater', 
'The girl touches a white sweater', 
'The girl tries a red sweater', 
'The girl tries a blue sweater', 
'The girl tries a yellow sweater', 
'The girl tries a white sweater', 
'The boy wears a red sweater', 
'The boy wears a blue sweater', 
'The boy wears a yellow sweater', 
'The boy wears a white sweater', 
'The boy touches a red sweater', 
'The boy touches a blue sweater', 
'The boy touches a yellow sweater', 
'The boy touches a white sweater', 
'The boy tries a red sweater', 
'The boy tries a blue sweater', 
'The boy tries a yellow sweater', 
'The boy tries a white sweater']