python - 求解所有可能的映射

标签 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)

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

最佳答案

模块 itertools 中的函数 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

关于python - 求解所有可能的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43567283/

相关文章:

python - 使用 Python 2 解释器时如何删除 Pycharm 中打印语句的 Python 3 警告?

python - 使用 C++ 扩展 Python 时,将模块方法放入不同的源文件失败

PHP - 从键生成指定范围内的随机整数

algorithm - 按字典序生成所有N个节点的二叉树

c# - 如何检查是否可以在 C# 中使用另一个字符串的字符获取一个字符串?

python - 如何在 python 中从 ndarray 中选择 n 项并跳过 m?

python - 为什么类型化列表的元素访问比使用 Numba 的数组慢得多?

c# - 合并排序代码不起作用并显示异常

c++ - 将字符串中表示的大数除以 3

python - 类属性的继承(python)