2017-04-23 5 views
0

Ich bin gerade auf eine interessante Frage gestoßen. Die Frage ist, für alle möglichen Zuordnungen zu lösen, um eine Eingabe zu erhalten. Ein Beispiel bin, wenn ich ‚012‘ gegeben und ein Wörterbuch wie diese:Lösung für alle möglichen Zuordnungen

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

Ich mag drucken:

ppm 
pqr 
prm 

Ich konnte es rekursiv lösen, als kodierte unten python:

Jetzt zum Spaß, ich versuchte es iterativ zu lösen, konnte es aber nicht zum Laufen bringen. Bitte geben Sie mir Hilfe!

+0

ich nicht folgen, die die Beziehung zwischen dem Eingang und ausgeben. Könnten Sie genauer sein? – Vallentin

+0

@Vallentin Ich habe einen Fehler bei der Ausgabe gemacht. Heiko Oberdiek hat es für mich repariert, danke! –

Antwort

1

Funktion product von Modul itertools hilft:

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') 

Ergebnis:

ppm 
pqm 
prm 

Und das Ergebnis für '1012' ist:

pppm 
ppqm 
pprm 
qppm 
qpqm 
qprm 
rppm 
rpqm 
rprm 
Verwandte Themen