解决所有可能的映射

时间:2017-04-23 04:08:01

标签: python algorithm

我刚刚遇到一个有趣的问题。问题是在给定输入的情况下按顺序求解所有可能的映射。例如,如果我给出了' 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)

现在为了好玩,我试图迭代地解决它,但无法让它发挥作用。请给我一些帮助!

1 个答案:

答案 0 :(得分: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