我刚刚遇到一个有趣的问题。问题是在给定输入的情况下按顺序求解所有可能的映射。例如,如果我给出了' 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)
现在为了好玩,我试图迭代地解决它,但无法让它发挥作用。请给我一些帮助!
答案 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