我得到了多个数字的集合,例如6837.我有一个字典,基本上说我可以为每个数字使用哪些字符,基本上是电话键上的数字,如下所示:
letters = {
"2": ["a","b","c"],
"3":["d",'e','f'],
'4':['g','h','i'],
'5':['j','k','l'],
'6':['m','n','o'],
'7':['p','q','r','s'],
'8':['t','u','v'],
'9':['w','x','y','z']}
所以我创建了一个列表列表,以显示每组数字的含义以及我所拥有的6837:
[['m', 'n', 'o'], ['t', 'u', 'v'], ['d', 'e', 'f'], ['p', 'q', 'r', 's']]
所以我需要将所有可能的单词组合在一起
第一个字符必须是:m或n或o
第二个字符:t或u或v
等等。
我试过itertools.combinations
,但没有做对。我可以蛮力夺取每个角色并按顺序追加其余角色并创建一个单词列表。但是必须有一种python方式来做到这一点非常干净。感谢您的所有投入。
答案 0 :(得分:3)
首先为您给定的数字创建一个合适的字母列表,然后使用Python的itertools.product
为这些字母创建所有可用的组合,如下所示:
from itertools import product
letters = [[""], [""], ["a","b","c"], ["d",'e','f'], ['g','h','i'],
['j','k','l'], ['m','n','o'], ['p','q','r','s'], ['t','u','v'], ['w','x','y','z']]
for combo in product(*(letters[x] for x in [6,8,3,7])):
print combo
对于6837,您将获得以下输出:
('m', 't', 'd', 'p')
('m', 't', 'd', 'q')
('m', 't', 'd', 'r')
('m', 't', 'd', 's')
('m', 't', 'e', 'p')
('m', 't', 'e', 'q')
('m', 't', 'e', 'r')
('m', 't', 'e', 's')
('m', 't', 'f', 'p')
('m', 't', 'f', 'q')
('m', 't', 'f', 'r')
('m', 't', 'f', 's')
('m', 'u', 'd', 'p')
('m', 'u', 'd', 'q')
('m', 'u', 'd', 'r')
('m', 'u', 'd', 's')
('m', 'u', 'e', 'p')
('m', 'u', 'e', 'q')
('m', 'u', 'e', 'r')
('m', 'u', 'e', 's')
('m', 'u', 'f', 'p')
('m', 'u', 'f', 'q')
('m', 'u', 'f', 'r')
('m', 'u', 'f', 's')
('m', 'v', 'd', 'p')
('m', 'v', 'd', 'q')
('m', 'v', 'd', 'r')
('m', 'v', 'd', 's')
('m', 'v', 'e', 'p')
('m', 'v', 'e', 'q')
('m', 'v', 'e', 'r')
('m', 'v', 'e', 's')
('m', 'v', 'f', 'p')
('m', 'v', 'f', 'q')
('m', 'v', 'f', 'r')
('m', 'v', 'f', 's')
('n', 't', 'd', 'p')
('n', 't', 'd', 'q')
('n', 't', 'd', 'r')
('n', 't', 'd', 's')
('n', 't', 'e', 'p')
('n', 't', 'e', 'q')
('n', 't', 'e', 'r')
('n', 't', 'e', 's')
('n', 't', 'f', 'p')
('n', 't', 'f', 'q')
('n', 't', 'f', 'r')
('n', 't', 'f', 's')
('n', 'u', 'd', 'p')
('n', 'u', 'd', 'q')
('n', 'u', 'd', 'r')
('n', 'u', 'd', 's')
('n', 'u', 'e', 'p')
('n', 'u', 'e', 'q')
('n', 'u', 'e', 'r')
('n', 'u', 'e', 's')
('n', 'u', 'f', 'p')
('n', 'u', 'f', 'q')
('n', 'u', 'f', 'r')
('n', 'u', 'f', 's')
('n', 'v', 'd', 'p')
('n', 'v', 'd', 'q')
('n', 'v', 'd', 'r')
('n', 'v', 'd', 's')
('n', 'v', 'e', 'p')
('n', 'v', 'e', 'q')
('n', 'v', 'e', 'r')
('n', 'v', 'e', 's')
('n', 'v', 'f', 'p')
('n', 'v', 'f', 'q')
('n', 'v', 'f', 'r')
('n', 'v', 'f', 's')
('o', 't', 'd', 'p')
('o', 't', 'd', 'q')
('o', 't', 'd', 'r')
('o', 't', 'd', 's')
('o', 't', 'e', 'p')
('o', 't', 'e', 'q')
('o', 't', 'e', 'r')
('o', 't', 'e', 's')
('o', 't', 'f', 'p')
('o', 't', 'f', 'q')
('o', 't', 'f', 'r')
('o', 't', 'f', 's')
('o', 'u', 'd', 'p')
('o', 'u', 'd', 'q')
('o', 'u', 'd', 'r')
('o', 'u', 'd', 's')
('o', 'u', 'e', 'p')
('o', 'u', 'e', 'q')
('o', 'u', 'e', 'r')
('o', 'u', 'e', 's')
('o', 'u', 'f', 'p')
('o', 'u', 'f', 'q')
('o', 'u', 'f', 'r')
('o', 'u', 'f', 's')
('o', 'v', 'd', 'p')
('o', 'v', 'd', 'q')
('o', 'v', 'd', 'r')
('o', 'v', 'd', 's')
('o', 'v', 'e', 'p')
('o', 'v', 'e', 'q')
('o', 'v', 'e', 'r')
('o', 'v', 'e', 's')
('o', 'v', 'f', 'p')
('o', 'v', 'f', 'q')
('o', 'v', 'f', 'r')
('o', 'v', 'f', 's')
答案 1 :(得分:2)
from itertools import product
def keypad(number):
letters = {'2':['a', 'b', 'c'],
'3':['d', 'e', 'f'],
'4':['g', 'h', 'i'],
'5':['j', 'k', 'l'],
'6':['m', 'n', 'o'],
'7':['p', 'q', 'r', 's'],
'8':['t', 'u', 'v'],
'9':['w', 'x', 'y', 'z']}
return [''.join(i) for i in product(*[letters[i] for i in number])]
if __name__ == "__main__":
words = keypad('6837')
print(words)
打印哪些:
['mtdp', 'mtdq', 'mtdr', 'mtds', 'mtep', 'mteq', 'mter', 'mtes', 'mtfp', 'mtfq', 'mtfr', 'mtfs', 'mudp', 'mudq', 'mudr', 'muds', 'muep', 'mueq', 'muer', 'mues', 'mufp', 'mufq', 'mufr', 'mufs', 'mvdp', 'mvdq', 'mvdr', 'mvds', 'mvep', 'mveq', 'mver', 'mves', 'mvfp', 'mvfq', 'mvfr', 'mvfs', 'ntdp', 'ntdq', 'ntdr', 'ntds', 'ntep', 'nteq', 'nter', 'ntes', 'ntfp', 'ntfq', 'ntfr', 'ntfs', 'nudp', 'nudq', 'nudr', 'nuds', 'nuep', 'nueq', 'nuer', 'nues', 'nufp', 'nufq', 'nufr', 'nufs', 'nvdp', 'nvdq', 'nvdr', 'nvds', 'nvep', 'nveq', 'nver', 'nves', 'nvfp', 'nvfq', 'nvfr', 'nvfs', 'otdp', 'otdq', 'otdr', 'otds', 'otep', 'oteq', 'oter', 'otes', 'otfp', 'otfq', 'otfr', 'otfs', 'oudp', 'oudq', 'oudr', 'ouds', 'ouep', 'oueq', 'ouer', 'oues', 'oufp', 'oufq', 'oufr', 'oufs', 'ovdp', 'ovdq', 'ovdr', 'ovds', 'ovep', 'oveq', 'over', 'oves', 'ovfp', 'ovfq', 'ovfr', 'ovfs']