如果条件语句中的'=='和'in'有什么区别?

时间:2018-12-05 07:35:39

标签: python python-3.x jupyter kaggle

嘿,我正在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:

,没有得到正确的答案。我的问题是为什么?这两个语句有什么区别?如果您遵循该代码,则其想法是在文档中找到某个关键字。因此,关键字==文档中的单词。

(我可以提供练习(上下文吗?),但我在这里并不重要,因为我的问题是一个普遍的问题。)

谢谢。

4 个答案:

答案 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,其中listkeyword.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。