2017-04-23 24 views
0

我剛碰到一個有趣的問題。問題是爲了解決所有可能的映射問題。舉個例子,如果我給「012」,並有這樣的解釋:解決所有可能的映射問題

mapping = { 
    '0': ['p'], 
    '1': ['p', 'q', 'r'], 
    '2': ['m'], 
} 

我想打印:

ppm 
pqr 
prm 

我能夠遞歸解決這個問題,如下面的編碼蟒蛇:

def print_all_recursive(s, t = ''): 
    if len(s) == 1: 
     for value in mapping[s]: 
      print(t + value) 
      return 
    for value in mapping[s[0]]: 
     print_all_recursive(s[1:], t + value) 

現在爲了好玩,我試圖迭代求解,但不能讓它開始工作。請給我一些幫助!

+0

我不跟隨輸入之間的關係並輸出。你可以再詳細一點嗎? – Vallentin

+0

@Vallentin我在輸出中犯了一個錯誤。 Heiko Oberdiek爲我修好了,謝謝! –

回答

1

功能product從模塊itertools幫助:

import itertools 

mapping = { 
    '0': ['p'], 
    '1': ['p', 'q', 'r'], 
    '2': ['m'], 
} 

def print_all(s): 
    for value in itertools.product(*[mapping[ch] for ch in s]): 
     print(''.join(value)) 

print_all('012') 

結果:

ppm 
pqm 
prm 

併爲'1012'結果是:

pppm 
ppqm 
pprm 
qppm 
qpqm 
qprm 
rppm 
rpqm 
rprm