2017-04-23 11 views
0

私はちょうど興味深い質問に出くわしました。問題は、入力を与えられたすべての可能なマッピングを解決することです。たとえば、私は「012」与えられ、このような辞書持ってる場合:私は印刷したいすべての可能なマッピングを解決する

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

を:

ppm 
pqr 
prm 

で下にコード化されたとして、私は、再帰的にそれを解決することができましたPython:

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) 

楽しいため、私は繰り返して解決しようとしましたが、動作させることができませんでした。私に助けてください!モジュールitertoolsから

+0

私は入力の関係に従いません出力する。より具体的になりますか? – Vallentin

+0

@Vallentin私は出力を間違えました。ヘイコOberdiekは私のためにそれを固定しました、ありがとう! –

答えて

1

機能productができます:

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 
関連する問題