2014-11-07 4 views
2

특정 키가 주어진 사전의 값에서 가능한 모든 문자열을 가져 오려고합니다. 예를 들어 'A'는 'aaa', 'aba'또는 'aac'과 'B'가 'bbb', 'bab'또는 'bbc'등일 수 있음을 나타냅니다.입력 문자열에 주어진 사전 값의 가능한 모든 조합. Python

그것이 내가 코드를 쓰기 시작 가능한 문자열

import itertools 
in_ = 'ABC' 
D = {'A':['aaa','aba','aac'],'B':['bbb','bab','bbc'],'C':['ccc','cac','ccb']} 

#out_ = ['aaabbbccc','ababbbccc','aacbbbccc','aaababccc','aaabbcccc','aaabbbcac','aaabbbccb'...] 

대부분의 조합을 보여줍니다 출력의 예를 제공하지만 정말 지저분하기 시작하고 난 itertools 또는 더 파이썬 뭔가를 사용하는 방법이 있다고 생각 목표를 달성하십시오

output = [] 
for char in in_: 
    out_string = '' 
    while char: 
     for v in D[char]: 
      while v: 
       for char2 in in_: 
        out_string 
#not pythonic . . . 

답변

5

글쎄, 여기에 itertools을 가져 왔습니다. 그것을 사용하자! 우리는 데카르트 제품 D['A'] × D['B'] × D['C']을 가지고 싶습니다. 따라서 itertools.product을 사용하여 정확히 수행 할 것입니다.

import itertools 

in_ = 'ABC' 
D = {'A':['aaa','aba','aac'],'B':['bbb','bab','bbc'],'C':['ccc','cac','ccb']} 

iterables = [D[character] for character in in_] 
out_ = [''.join(tup) for tup in itertools.product(*iterables)] 

지금, out_은 다음과 같습니다

['aaabbbccc', 'aaabbbcac', 'aaabbbccb', 'aaababccc', 'aaababcac', 'aaababccb', 
'aaabbcccc', 'aaabbccac', 'aaabbcccb', 'ababbbccc', 'ababbbcac', 'ababbbccb', 
'abababccc', 'abababcac', 'abababccb', 'ababbcccc', 'ababbccac', 'ababbcccb', 
'aacbbbccc', 'aacbbbcac', 'aacbbbccb', 'aacbabccc', 'aacbabcac', 'aacbabccb', 
'aacbbcccc', 'aacbbccac', 'aacbbcccb'] 

는 결과가 당신이 가고 있었다인가요?

+0

정말 감사합니다. 나는 itertools가가는 길을 알았지 만 그 제품이 그 결과를 줄 수 있다는 것을 알지 못합니다. –

+0

* iterables가 iterables에 대해 수행하는 작업은 무엇입니까? –

+1

'*'은 [언 패킹 연산자] (https://docs.python.org/2/tutorial/controlflow.html#unpacking-argument-lists)입니다. 따라서'iterables '요소의 수를 미리 알 필요가 없다는 점을 제외하면'product (* iterables)'는'product (iterables [0], iterables [1], ...)와 동일합니다. – senshin

관련 문제