添加您的词对元组,而不是作为一个空间分隔的单个字符串,然后筛选上是你wordset1
集的子集元组名单:
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就会返回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
只是为了双检的示例; '“雪花”'不会返回True,因为''flake''不在单词集中,对吗? –