如何从单词列表中找到它在字符串中找到的单词[重复]
Posted
技术标签:
【中文标题】如何从单词列表中找到它在字符串中找到的单词[重复]【英文标题】:How to find the word which it had found in string from list of words [duplicate] 【发布时间】:2020-04-26 02:37:01 【问题描述】:我们如何通过这个来知道是哪个单词??
word_list = ['hello','hi','super']
if any(word in string for word in word_list):
print('found')
这样我可以遍历这些行,但无法找到它在该行中找到的单词。
示例: 在输入中考虑 4 行
Hello samuel\n
Hi how are you\n
I’m super\n
Thanks
预期输出:
Hello,true
Hi,true
Super,true
N/a,false
但是谁能告诉我如何打印它在其中找到的单词。
【问题讨论】:
您是否关心单词是否不区分大小写? 【参考方案1】:你可以这样做:
str = """Hello samuel
Hi how are you
hi I’super
Thankq"""
word_list=["hello","hi","super"]
for line in str.split("\n"):
word_found = [word.lower() in line.lower() for word in word_list]
word_filtered = [i for (i, v) in zip(word_list, word_found) if v]
print(",".format(" ".join(word_filtered) if word_filtered else "n/a", not not word_filtered))
基本上,您的word in string for word in word_list
所做的是根据您当前正在处理的行创建一个列表[True, False, False]
。 any
仅检查列表中的任何元素是否为 True
并返回 true。
有了这些知识,我们可以构建这样的东西。
word_found = [word.lower() in line.lower() for word in word_list]
如果该行包含此位置上的单词,则生成带有True
的布尔列表,否则生成False
。如您所见,我用户 lower() 不区分大小写。如果这不是您想要的,请更改。但从您的输出看来,这就是您想要的。
word_filtered = [i for (i, v) in zip(word_list, word_found) if v]
用这个过滤掉所有不存在的单词。
print(",".format(" ".join(word_filtered) if word_filtered else "n/a", not not word_filtered))
这是创建您预期的输出。
输出:
hello,True
hi,True
hi super,True
n/a,False
如你所见,我稍微修改了你的输入(见第 3 行)。如您所见,即使一行上有多个匹配项,此解决方案也会打印任何单词。
【讨论】:
【参考方案2】:这是一种方法:
Word_list=['hello','hi','super']
l = ["Hello samuel","Hi how are you","I’super","Thankq"]
for i in l:
k = [x for x in i.split(' ') if x.lower() in Word_list]
if k:
print(f'k[0], true')
else:
print(f'N/A, false')
Hello, true
Hi, true
N/A, false
N/A, false
【讨论】:
以上是关于如何从单词列表中找到它在字符串中找到的单词[重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何从字母矩阵中找到可能的单词列表 [Boggle Solver]
如何从字母矩阵中找到可能的单词列表 [Boggle Solver]