2016-10-11 7 views
-1

の単語のリストに、文字の配列を比較すると(そのボタンの私のシーケンスはここにある、古い学校のテキストメッセージを考える4266532)は、私は特定の順序である文字のリストを持っているのpython

letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'], ['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 

および単語のリスト

words = ['i', 'am', 'an', 'old', 'man'] 

この単語リストと比較して、この一連の文字に一致する文がいくつあるかを見たいと思っています。

例えば文字の配列は、「私は古い」

EDITは、「私は古いよ」と等しくなることができます:私は順序で何を意味するのか明確にするために、まだ代わりにタッチのボタンを持っている古い携帯電話上の

画面。各ボタン(または数字)には文字が付いています。たとえば、番号/ボタン '2'には、文字「['a','b','c']」が添付されています。番号/ボタン '3'には、文字「['d,'e','f']」が添付されています。だから、あなたはあなたの完全な基準がわから4266532

+0

データをかなり簡単に強制することができますか?また、シーケンスとみなされるロジックを指定していません。老人であり、あなたが「私の老人」であっても「男」であると考えていると考えていると考えていると考えますか? –

+0

それは大学の割り当てのため、データは私が示しているものよりはるかに大きくはないでしょう、彼らは異なる単語リストと文字シーケンスに対してテストするかもしれませんが、サイズは似ています@PadraicCunningham – oneman

+0

結果は、つまり、あなたの 'words'オブジェクトからですか? – enderland

答えて

1

を未押すと、画面に表示される可能性がどのような文字が表示上記の私のlettersリストは、しかし、あなたのリストが小さいことしようとしているので、あなたのような何かを行うことができます。

from collections import Counter 
from itertools import combinations, chain 
letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'],['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 
allowed = set(chain.from_iterable(letters)) 
words = ['i', 'am', 'an', 'old', 'man'] 

for phrase in combinations(words, 3): 
    phrase_c = Counter(chain.from_iterable(phrase)) 
    if any((v > 1 and k not in "mno") or k not in allowed for k, v in phrase_c.items()): 
     continue 
    print(phrase) 

これはあなたを与えるだろう:

('i', 'am', 'old') 
('i', 'an', 'old') 
('i', 'old', 'man') 

言葉は常に文字のサブセットである場合は、if k not in "mno"

を削除することができます
from collections import Counter 
from itertools import combinations, chain 

letters = [['g', 'h', 'i'], ['a', 'b', 'c'], ['m', 'n', 'o'], ['m', 'n', 'o'], ['j', 'k', 'l'], ['d', 'e', 'f']] 

words = ['i', 'am', 'an', 'old', 'man'] 

for phrase in combinations(words, 3): 
    for ind, letter in enumerate(chain.from_iterable(phrase)): 
     if ind >= len(letters) or letter not in letters[ind]: 
      break 
    else: 
     print(phrase) 

があなたに与えるだろう:

('i', 'am', 'old') 
('i', 'an', 'old') 

あなたが順序であることを持っている場合

それはちょうどフレーズから各文字がサブセットで、正しい順序で表示されることを確認し、単純ですあなたが文字の順序に基づいて単語をソートし、セットからの文字を含まない単語をフィルタリングすると、複雑さがかなり軽減されます。つまり、最大6文字のフレーズしか作成できないということも考えてみてください。4266532

+0

これは正しい文字列の426653シーケンスに含まれていないので、( 'i'、 'old'、 'man')は出力ではありませんが、これは正しいトラックに入れられます。また、私は 'コレクション'や 'itertools'を見たことがないので、私はそれらを読んでいる必要がありますが、それはあなたに感謝、少なくともそれは正しい方向に一歩です – oneman

+0

したがって、正確にする必要があります同じ注文ですか? –

+0

http://imgur.com/a/bLHe0 – oneman

関連する問題