В чем разница между '==' и 'in' в условных выражениях? - PullRequest
0 голосов
/ 05 декабря 2018

Эй, я выполнял упражнение в 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')

Я взял решение и изменил 'in' in:

if keyword.lower() in normalized:

и изменил его на:

if keyword.lower() == normalized:

и не получилправильный ответ.Мой вопрос почему?в чем разница между двумя утверждениями?Если вы следуете коду, идея состоит в том, чтобы найти определенное ключевое слово в документе.Итак, ключевое слово == слово в документе.

(я могу предоставить упражнение (контекст?), Но мне это не важно, поскольку мой вопрос общий.)

Спасибо.

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Использование == дает вам True, только если есть точное совпадение между обоими элементами, и они имеют одинаковый dtype

if keyword.lower() == normalized:

Здесь ключевое слово.lower () # String # не является точным соответствием нормализованного # list #

Использование in сделает более простой поиск, где левый элемент может находиться где угодно в правом элементе

if keyword.lower() in normalized:

Здесь, если ключевое слово.lower () найдено где-либо в normalized, оно вернет True.

0 голосов
/ 05 декабря 2018

Тестирование ключевых слов "in" на членство.Я не совсем понимаю ваши переменные, но я предполагаю, что вы хотите найти, если переменная "keyword" находится в "нормализованном списке".Использование "==" здесь будет означать, что переменная "ключевое слово" равна переменной нормализованного списка (которая, если ваше ключевое слово является строкой, а ваш нормализованный список является списком, то, очевидно, это не так)

0 голосов
/ 05 декабря 2018

Поскольку normalized - это list, где keyword.lower() - это str, это уже разница, str не может быть эквивалентно list, этот оператор ==проверяет, совпадает ли что-то с другой вещью, тогда как оператор in проверяет, содержит ли что-то другое, demo:

>>> a=4
>>> b=4
>>> a==b
True
>>> a in b
Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    a in b
TypeError: argument of type 'int' is not iterable
>>> a=4
>>> b=[1,4]
>>> a==b
False
>>> a in b
True
>>> 
0 голосов
/ 05 декабря 2018

Первый оператор if keyword.lower() in normalized: проверяет, является ли строка keyword.lower() одним из элементов внутри списка normalized.Это Истина.

Другой оператор if keyword.lower() == normalized: проверяет, имеет ли keyword.lower() строка то же значение , что и normalized список.Это Ложь.

...