2014-10-05 2 views
0
에서 시퀀스를 생성하는 방법

그래서 나는이 같은 요소의 세트 시리즈를 가지고 :다른 세트

elements= { 
'a' : '12345', 
'b' : '67890', 
'c' : 'abcdefg', 
'd' : 'hijklmn', 
... 
} 

를 그리고 무엇을 내가 원하는 출력의 정의에 걸리는 기능을 가지고 있으며 해당 정의와 일치하는 위의 세트에서 가능한 모든 문자 조합을 반환합니다.

예를 들어, 함수가 'abbc'을받은 경우 세트 a에서 한 문자가있는 모든 문자열 세트를 반환하고 세트 b의 문자 다음에 세트 b의 문자 다음에 문자를 넣습니다 세트 c에서.

이상적으로는 발전기를 반환합니다.

나는 입력 문자를 살펴보고 적절한 세트를 elements에서 선택하고 모든 이전 입력의 모든 조합을 생성하는 루프를 만드는 방법을 고민 중입니다.

예를 들어, 입력을 반복하면 다음 시퀀스를 어떻게 얻을 수 있습니까?

for c in list(input): 
    element_set = list(elements[c]) 
    #now I've got the list of elements for this character, but how do I combine all possible values here with all possible values for the next character? 

나는 다음과 같이 끝 목록의 목록을 만들 수 : 어떻게 가능한 모든 값의 "+은"0 위치의 모든 가능한 값을 "잡아 않는 다음

[ list(elements[a]), list(elements[b]), list(elements[b]), list(elements[c]) ] 

을하지만를 위치 1 ", 등?

답변

3

이에 대한 itertools 끊임없이 도움을 사용할 수 있습니다

>>> elements = {'a': '12', 'b': '67', 
       'c': 'ab', 'd': 'hi'} # shortened example; 875 answers otherwise! 
>>> s = 'abbc' 
>>> from itertools import product 
>>> for t in product(*[elements[c] for c in s]): 
    print t 


('1', '6', '6', 'a') 
('1', '6', '6', 'b') 
('1', '6', '7', 'a') 
('1', '6', '7', 'b') 
('1', '7', '6', 'a') 
('1', '7', '6', 'b') 
('1', '7', '7', 'a') 
('1', '7', '7', 'b') 
('2', '6', '6', 'a') 
('2', '6', '6', 'b') 
('2', '6', '7', 'a') 
('2', '6', '7', 'b') 
('2', '7', '6', 'a') 
('2', '7', '6', 'b') 
('2', '7', '7', 'a') 
('2', '7', '7', 'b') 
+0

가 난 itertools에보고했다. 그러나 물론 나는 이것을 놓쳤다. 이제 나는 바보 같아. 하하. –

+0

+1 그냥 나를 이길. –