检查单词是否存在于列表的特定位置

Check if a word exists at a particular position of a list

提问人:Codingamethyst 提问时间:9/2/2022 最后编辑:halferCodingamethyst 更新时间:9/5/2022 访问量:107

问:

假设我有一个列表列表。

List1=[["Red is my favorite color."],["Blue is her favorite."], ["She is really nice."]]

现在我想检查一组单词之后是否存在“is”这个词。

我做了一个词 liseword_list=['Red', 'Blue']

有没有办法使用 if 语句来检查?

如果我写 It 将返回 List1 中的所有三个句子,我希望它返回前两个句子。 if 'is' in sentences:

有没有办法检查单词“is”是否正好位于word_list中的单词之后?先谢谢你。

Python 列表 循环 if-statement nested-lists

评论


答:

2赞 PepeChuy 9/2/2022 #1

你可以试试这个:

List1 = [['Red is my favorite color.'],['Blue is her favorite.'], ['She is really nice.']]
listResult = []
word_list = ['Red', 'Blue']
for phrase in List1:
    for word in word_list:
        if f'{word} is' in phrase[0]:
            listResult.append(phrase[0])

评论

2赞 mozway 9/2/2022
请注意,此解决方案是二次的(即对于大型列表来说速度较慢)。
0赞 ben 9/2/2022 #2

已经回答了。

请参阅模块文档:https://docs.python.org/3/library/re.html

堆栈溢出之前回答的问题:检查字符串是否与模式匹配

评论

0赞 Codingamethyst 9/2/2022
2.实际上,我判定了标记化的数据列表,这就是我最终得到包含单个字符串的列表列表的方式。
0赞 Community 9/7/2022
您的答案可以通过其他支持信息进行改进。请编辑以添加更多详细信息,例如引文或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到有关如何写出好答案的更多信息。
3赞 mozway 9/2/2022 #3

铌。我假设字符串的开头有匹配项。对于任何位置的匹配,请使用 re.search 而不是 re.match

您可以使用正则表达式:

import re

regex = re.compile(fr'\b({"|".join(map(re.escape, word_list))})\s+is\b')
# regex: \b(Red|Blue)\s+is\b

out = [[bool(regex.match(x)) for x in l]
       for l in List1]

输出:[[True], [True], [False]]

使用的输入:

List1 = [['Red is my favorite color.'],
         ['Blue is her favorite.'],
         ['She is really nice.']]

word_list = ['Red', 'Blue']

如果你想要这些句子:

out = [[x for x in l if regex.match(x)]
       for l in List1]

输出:

[['Red is my favorite color.'],
 ['Blue is her favorite.'],
 []]

或作为平面列表:

out = [x for l in List1 for x in l if regex.match(x)]

输出:

['Red is my favorite color.',
 'Blue is her favorite.']

评论

0赞 mozway 9/2/2022
@Codingamethyst请注意,我假设字符串的开头匹配。对于任何地方的匹配,请使用而不是re.searchre.match
0赞 mozway 9/2/2022
正则表达式在字符串级别工作,完全不知道容器。我不确定您指的是我的哪种替代方案,但请用具有预期输出的清晰示例更新您的问题。
0赞 Codingamethyst 9/2/2022
您的答案工作正常,我想知道是否有办法删除 [] 空列表,因为我从 4000 个数据集中获得了 5000+ 个空列表。我已经使用过滤器删除了它,我想知道是否可以使用正则表达式本身来做到这一点。
0赞 mozway 9/2/2022
不,不是。如上所述,正则表达式不了解列表,只知道列表中包含的字符串。您需要使用后处理进行过滤。
0赞 Codingamethyst 9/2/2022
另一个愚蠢的问题,对不起,但是是否可以检查多个单词列表。而不是word_list,如果我有两个或三个列表,是否可以使用类似 or 运算符的东西来检查所有列表?我总是可以合并并制作 1 个列表,但我想知道是否可以在正则表达式中执行。我再次为这个愚蠢的问题感到抱歉