嘿,我正在Kaggle进行练习,尽管我正确解决了问题,但我还是想看看Kaggle提供的解决方案。在这里:
def word_search(documents, keyword):
# list to hold the indices of matching documents
indices = []
# Iterate through the indices (i) and elements (doc) of documents
for i, doc in enumerate(documents):
# Split the string doc into a list of words (according to whitespace)
tokens = doc.split()
# Make a transformed list where we 'normalize' each word to facilitate matching.
# Periods and commas are removed from the end of each word, and it's set to all lowercase.
normalized = [token.rstrip('.,').lower() for token in tokens]
# Is there a match? If so, update the list of matching indices.
if keyword.lower() in normalized:
indices.append(i)
return indices
doc_list = ["The Learn Python Challenge Casino.", "They bought a car", "Casinoville"]
word_search(doc_list, 'casino')
我接受了解决方案,并在“”中进行了更改:
if keyword.lower() in normalized:
并将其更改为:
if keyword.lower() == normalized:
,没有得到正确的答案。我的问题是为什么?这两个语句有什么区别?如果您遵循该代码,则其想法是在文档中找到某个关键字。因此,关键字==文档中的单词。
(我可以提供练习(上下文吗?),但我在这里并不重要,因为我的问题是一个普遍的问题。)
谢谢。
答案 0 :(得分:1)
第一条语句if keyword.lower() in normalized:
正在检查keyword.lower()
字符串是否是列表normalized
中内部的元素之一。这是真的。
另一条语句if keyword.lower() == normalized:
正在检查keyword.lower()
字符串是否与normalized
列表具有相同的值。这是错误的。
答案 1 :(得分:0)
“ in”关键字测试成员资格。我不太了解您的变量,但是我假设您要查找的是“关键字”变量是否在标准化列表中。使用“ ==”就好像在说“关键字”变量是否等于规范化列表变量(如果您的关键字是字符串,而规范化列表是列表,则显然不是)< / p>
答案 2 :(得分:0)
因为class Device < ApplicationRecord
has_one :car
end
class Car < ApplicationRecord
belongs_to :device
end
是normalized
,其中list
是keyword.lower()
,所以已经是不同了,str
不能等同于str
,此list
运算符将检查某物是否等于另一事物,而==
运算符将检查某物是否包含另一事物,演示:
in
答案 3 :(得分:0)
只有在两个元素之间完全匹配并且它们具有相同的dtype时,使用==
才能为您提供True
if keyword.lower() == normalized:
在这里,keyword.lower()#String#与规范化的#list#不完全匹配
使用in
可以进行更轻松的搜索,其中左元素可以在右元素中的任意位置
if keyword.lower() in normalized:
如果在normalized
中的任意位置找到keyword.lower(),它将返回True。