gpt4 book ai didi

python - 将元组与非元组列表进行比较

转载 作者:太空宇宙 更新时间:2023-11-04 03:02:10 26 4
gpt4 key购买 nike

编写下面的代码以接收一个列表/集合和一个字符串,如果我能够将字符串分成列表中的两个单词,那么我会返回。我知道我很接近,我只是无法正确比较或其他什么。

例如

wordBreakEasy("snowfall", ("apple", "fall", ..., "snow"))

将返回 True

def wordBreakEasy(str1, wordset):
wordset1 = set(wordset)
breakup = ['%s %s' % (str1[:i], str1[i:]) for i in range(1, len(str1))]
newlist = []
for x in breakup:
newlist.append((x.split()))
wordset2 = set(map(tuple, newlist))

for wordset2 in wordset1:

这是我现在不知道去哪里的地方。

最佳答案

将您的词对作为元组添加,而不是作为以空格分隔的单个字符串,然后在属于您的 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

关于python - 将元组与非元组列表进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40583924/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com