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