を未押すと、画面に表示される可能性がどのような文字が表示上記の私の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
データをかなり簡単に強制することができますか?また、シーケンスとみなされるロジックを指定していません。老人であり、あなたが「私の老人」であっても「男」であると考えていると考えていると考えていると考えますか? –
それは大学の割り当てのため、データは私が示しているものよりはるかに大きくはないでしょう、彼らは異なる単語リストと文字シーケンスに対してテストするかもしれませんが、サイズは似ています@PadraicCunningham – oneman
結果は、つまり、あなたの 'words'オブジェクトからですか? – enderland