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"))