2016-01-18 33 views
3

我給出了一組多個數字,例如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方法。感謝所有的投入。

回答

2

使用itertools.product

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'] 
+0

輸出是否可以修改,這樣我就可以用'over'代替[('o','v','e','r')]。謝謝。 – kevbuntu

+0

我編輯這個使用'.join'爲每個字母組。我還刪除了返回重複的額外迭代。 – tijko

+0

感謝您的編輯 – kevbuntu

4

它看起來像你對我要itertools.product

>>> import itertools 
>>> opts = [['m', 'n', 'o'], ['t', 'u', 'v'], ['d', 'e', 'f'], ['p', 'q', 'r', 's']] 
>>> for item in itertools.product(*opts): 
... print item 
... 
('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') 
+0

謝謝,你沒有回答正是我問。雖然完整的答案將會從一個語料庫「覆蓋,克服,大衣,過度生長」。我想我需要找到所有以重頭開始的單詞。但你確實更清楚地表示感謝。 – kevbuntu

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') 
相關問題