如何从单词列表中找到它在字符串中找到的单词[重复]

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]

在字符串中找到某个单词[重复]

审查(银)

python 这个“oneliner”找到可以从作为参数给出的单词中的字符创建的所有单词。要在此列出的列表

6/14考试总结