その後、あなたのwordset1
セットのサブセットあるタプルにそのリストをフィルタリングし、タプルとしてではなく、スペースで区切られた1つの文字列として、あなたの単語ペアを追加します。
breakup = [(str1[:i], str1[i:]) for i in range(1, len(str1))]
present = [tup for tup in breakup if not wordset1.issuperset(tup)]
私はここset.issuperset()
methodを使用;引数iterableのすべての要素がセットに存在する場合はTrue
を返します。したがって、タプルの両方の要素が存在する場合にのみTrue
を返します。
のみその後、単一の文字列に単語を組み合わせて:あなたは本当に、これらの中間のリストを必要としない
newlist = [' '.join(tup) for tup in present]
。あなただけTrue
を返すように関数のサブセットです任意のなタプルがあるかどうか確認する必要があり:
breakup = ((str1[:i], str1[i:]) for i in range(1, len(str1)))
return any(wordset1.issuperset(tup) for tup in breakup)
私はジェネレータ式にbreakup
を回しました。早い段階で一致する単語対を見つけることができれば、リスト全体を構築する必要はありません。 any()
functionは、反復される値の1つが真であるとすぐにTrue
を返します。これもジェネレータ式なので、一致が見つかるまで、単語のペアを遅延テストします。
デモ:ここ
>>> def wordBreakEasy(str1, wordset):
... wordset1 = set(wordset)
... breakup = ((str1[:i], str1[i:]) for i in range(1, len(str1)))
... return any(wordset1.issuperset(tup) for tup in breakup)
...
>>> wordBreakEasy("snowfall", ("apple", "fall", "...", "snow"))
True
>>> wordBreakEasy("snowflake", ("apple", "fall", "...", "snow"))
False
だけdoublecheckすると例です。 '' snowflake ''は' 'flake' 'が単語集合にないので真を返しません。 –