这是问题, 研究人员收集了数千篇新闻文章。但她想将注意力集中在包含特定单词的文章上。完成以下功能,以帮助她过滤文章列表。
您的职能应满足以下条件:
请勿包括关键字字符串仅作为较大单词的一部分显示的文档。例如,如果她正在寻找关键字“ closed”,则不会包含字符串“ enclosed”。
她不希望您区分大写字母和小写字母。因此,“结案”一语。关键字“关闭”时将包含在内
不要让句号或逗号影响匹配的内容。 “它是封闭的。”关键字“关闭”时将包含在内。但是您可以假设没有其他类型的标点符号。
这是我的ans(我想仅使用循环和ifs解决此问题):
def word_search(doc_list, keyword):
"""
Takes a list of documents (each document is a string) and a keyword.
Returns list of the index values into the original list for all documents
containing the keyword.
Example:
doc_list = ['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?']
word_search(doc_list, 'casino')
>>> [0]
"""
#non-course provided and my own code starts here.
k=0
print(doc_list,keyword)
for string in doc_list:
print(string)
for char in string:
if char.upper()==keyword[0] or char.lower()==keyword[0]:
print(char,string[string.index(char)-1])
if (string[string.index(char)-1]==" " or string[string.index(char)-1]=="" or string[string.index(char)-1]==".") and (string[string.index(char)+len(keyword)]==" " or string[string.index(char)+len(keyword)]=="" or string[string.index(char)+len(keyword)]=="."):
print(string[string.index(char)-1])
for k in range(len(keyword)):
print(k)
if string[string.index(char)+k].upper()==keyword[k] or string[string.index(char)+k].lower()==keyword[k]:
c=c+k
if len(c)==len(keyword):
x=[doc_list.index(string)]
return x
但是运行检查代码后:
q2.check() #returns,
Incorrect: Got a return value of None given doc_list=['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?'], keyword='casino', but expected a value of type list. (Did you forget a return statement?)
以下是执行代码后打印出来的内容:
['The Learn Python Challenge Casino', 'They bought a car, and a horse',
'Casinoville?'] casino
The Learn Python Challenge Casino
C
C
They bought a car, and a horse
c
Casinoville?
C ?
代码已成功编译,没有语法和其他显式错误。但是我找不到任何隐性错误,这些错误在经过5个多小时的努力后仍会产生错误的答案。请帮忙!
答案 0 :(得分:0)
解决此问题的更好方法是使用方法varient: 8 pro
1
2
3
<actual response from db for 8 pro>
4
varient: note
1
2
3
<actual response from db for note>
4
varient: iphone x
1
2
3
<actual response from db for iphone x>
4
。可以在here中找到其用法的示例。
因此该算法将变为:
contains()
答案 1 :(得分:0)
如果我没记错的话,Kaggle课程还为您提供了解决方案,这是您应该理解并逐步使用的解决方案。您的代码有许多条件,要确定其中哪些条件未正确实现将很困难。还可以检查Kaggles的解决方案,因为您不能使用此前进方式。此外,您拥有的解决方案还有一个嵌套的for循环,用于逐个检查每个字母。那是非常低效的。不错的初学者尝试:)
答案 2 :(得分:0)
如答案所述,您的函数应返回一个列表。相反,您返回的是一个None
值,因为在嵌套if的某些点上,您要转到函数的末尾,其中未指定任何return
。如果您在函数末尾未指定任何return
关键字,它将默认返回None
顺便说一句,python提供了许多utils库,例如str.index()
方法,如果在原始字符串中找到该字符串,则会返回字符串索引
我认为这是对您的解决方案的更好开发:
def word_search(doc_list, keyword):
"""
Takes a list of documents (each document is a string) and a keyword.
Returns list of the index values into the original list for all documents
containing the keyword.
Example:
doc_list = ['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?']
word_search(doc_list, 'casino')
>>> [0]
"""
my_list = []
for doc in doc_list:
curr_doc = doc.lower()
try:
curr_index = curr_doc.index(keyword.lower())
my_list.append(curr_index)
except:
my_list.append(None)
return my_list
print(word_search(['The Learn Python Challenge Casino', 'They bought a car, and a horse', 'Casinoville?'], 'casino'))
输出:[27, None, 0]
如您所见,在我的代码中,我根据问题的要求在函数定义的末尾返回了一个列表
答案 3 :(得分:0)
这是使用正则表达式的解决方案
traverse(M, print<std::string>);
答案 4 :(得分:-1)
def word_search(doc_list, keyword):
res = []
sum = 0
for i in range(len(doc_list)-1):
if(doc_list[i] == keyword):
sum=sum+1
res.append(doc_list[i])
return sum, res