Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何遍历字符串列表(即一个句子)并检查其中是否有特定的单词?_Python - Fatal编程技术网

Python 如何遍历字符串列表(即一个句子)并检查其中是否有特定的单词?

Python 如何遍历字符串列表(即一个句子)并检查其中是否有特定的单词?,python,Python,因此,问题是创建一个函数,该函数接受一个文档列表(每个文档都是一个字符串)和一个关键字。它应该将索引值列表返回到包含关键字的所有文档的原始列表中 示例(结果应为[0]): 我尝试了列表理解,但我不知道哪里出了问题。这是我的密码: def word_search(doc_list, keyword): indices=[] for i, doc in enumerate(doc_list): indices =[i for word in doc.split(&qu

因此,问题是创建一个函数,该函数接受一个文档列表(每个文档都是一个字符串)和一个关键字。它应该将索引值列表返回到包含关键字的所有文档的原始列表中

示例(结果应为
[0]
):

我尝试了列表理解,但我不知道哪里出了问题。这是我的密码:

def word_search(doc_list, keyword):
    indices=[]
    for i, doc in enumerate(doc_list):
        indices =[i for word in doc.split(" ") if word.lower().strip(".,")== keyword.lower()]
        return indices

在每次迭代中,重写index的值+return语句位于错误的位置,因此它实际上总是在检查第一句话后返回

def word_search(doc_list, keyword):
    indices=[]
    for i, doc in enumerate(doc_list):
        sentence_words = [word.strip(".,")for word in doc.lower().split(" ")]
        if keyword in sentence_words:
            indices.append(i)
    return indices

您的工作代码:

def word_search(doc_list, keyword):
    indices=[]
    for i, doc in enumerate(doc_list):
        if len([i for word in doc.split() if word.lower().strip(".,")== keyword.lower()])>0:
            indices.append(i)
    return indices
供您选择的可选正则表达式代码

import re
def word_search_re(doc_list, keyword):
    indices=[]
    keyword='\\b'+keyword+'\\b'
    for i, doc in enumerate(doc_list):
        doc=re.sub('(\.|,)+',"",doc)
        if re.search(keyword,doc,re.IGNORECASE):
            indices.append(i)
    return indices

这将为您提供与
文档列表
的每个项目相匹配的索引,并满足区分大小写的要求:

def word_search(word_list, search):
    search = search.lower()
    def trim_and_lower(s):
        return s.split(".")[0].lower()

    # normalize string
    str_list = map(trim_and_lower, doc_list)
    indices = [[i for i, c in enumerate(ln.split(" ")) if c == search] for ln in str_list]
    return list(indices)

您的代码作为一行代码列表:

def word_search(doc_list, keyword):
    return [i for i, doc in enumerate(doc_list) if any(keyword.lower() == w.lower().strip(".,") for w in doc.split(" "))]
    
这里有一个几乎只有一行的代码,使用
map
,它仍然可读。在这种情况下,真正的单衬套是不可维护的

doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
def word_search(doc_list, keyword):
    def find_in_doc(doc: str):
        return any(keyword.lower() == w.lower().strip(".,") for w in doc.split(" "))

    return [i for i, v in enumerate(map(find_in_doc, doc_list)) if v]

print(word_search(doc_list, "casino"))
[0]


你有错误吗?你在每一步都重写索引,方法是执行
index=[i for…]
。要检查单词是否在文档中并添加索引,您可以在[word.strip(“,”).lower()中为[word.split()]中的单词添加关键字.lower()]:index.append(i)@Cfreak no我的输出显示空列表
def word_search(doc_list, keyword):
    return [i for i, doc in enumerate(doc_list) if any(keyword.lower() == w.lower().strip(".,") for w in doc.split(" "))]
    
doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
def word_search(doc_list, keyword):
    def find_in_doc(doc: str):
        return any(keyword.lower() == w.lower().strip(".,") for w in doc.split(" "))

    return [i for i, v in enumerate(map(find_in_doc, doc_list)) if v]

print(word_search(doc_list, "casino"))