1

リストから特定の単語 (11 文字を超える長さ) を呼び出し、携帯電話で同じキーを押して入力できる単語を調べたいと考えています。 )。

不器用ですが効果的なコードで、各単語を数字列にすることができました。

numbers = []
dial = []
for word in lowers:
    if len(word)>11 and "\'" not in word:
        dial.append(word)
    if len(word)>11 and "\'" not in word:
            worda = word.replace('a','2')
            wordb = worda.replace('b','2')
            wordc = wordb.replace('c','2')
            wordd = wordc.replace('d','3')
            worde = wordd.replace('e','3')
            wordf = worde.replace('f','3')
            wordg = wordf.replace('g','4')
            wordh = wordg.replace('h','4')
            wordi = wordh.replace('i','4')
            wordj = wordi.replace('j','5')
            wordk = wordj.replace('k','5')
            wordl = wordk.replace('l','5')
            wordm = wordl.replace('m','6')
            wordn = wordm.replace('n','6')
            wordo = wordn.replace('o','6')
            wordp = wordo.replace('p','7')
            wordq = wordp.replace('q','7')
            wordr = wordq.replace('r','7')
            words = wordr.replace('s','7')
            wordt = words.replace('t','8')
            wordu = wordt.replace('u','8')
            wordv = wordu.replace('v','8')
            wordw = wordv.replace('w','9')
            wordx = wordw.replace('x','9')
            wordy = wordx.replace('y','9')
            wordz = wordy.replace('z','9')
            numbers.append(wordz)

numberset = set(numbers)   

次に、各数字が何回出現するかを検索し、1 より大きい場合はその場所をログに記録し、他のリストからまとめてタプルとして提供します。場所と同じ番号を共有しているものを見つける方法がわかりません。

4

3 に答える 3

2

辞書を作ったほうがいいかもしれません

charmap = { 'a' : '2', 'b' : '2', etc... }
wordz = defaultdict(list)
for word in lowers:
    wordz[''.join(charmap[c] for c in word)].append(word)

for k,v in wordz.items():
    if len(v) > 1:
        print('{}:{}'.format(k, v))

あなたに与えます:

2667874284667:['compurgations', 'constrictions']
...
于 2013-09-18T04:04:31.483 に答える
1

リストに何かが表示される回数を数えるには、次を使用する必要があります。

myList = ["a","b","c","a"]
myList.count("a")
2
于 2013-09-18T04:52:29.060 に答える
1

その方法は次のとおりです。変換テーブルを使用して文字をダイヤラ番号にマッピングし、次に各番号に一連の単語を作成します。次に、結果の dict を繰り返し処理して、複数の単語のセットを持つものを取得します。

from pprint import pprint
from collections import defaultdict
dialer_table = str.maketrans({
    'a':'2',
    'b':'2',
    'c':'2',
    'd':'3',
    'e':'3',
    'f':'3',
    'g':'4',
    'h':'4',
    'i':'4',
    'j':'5',
    'k':'5',
    'l':'5',
    'm':'6',
    'n':'6',
    'o':'6',
    'p':'7',
    'q':'7',
    'r':'7',
    's':'7',
    't':'8',
    'u':'8',
    'v':'8',
    'w':'9',
    'x':'9',
    'y':'9',
    'z':'9',
})

dial = defaultdict(set)
for word in lowers:
    if len(word) > 11 and "\'" not in word:
        dial[word.translate(dialer_table)].add(word)

pprint([dialset for dialset in dial.values() if len(dialset) > 1])
于 2013-09-18T04:01:26.763 に答える