Check if a word is in a string in Python
--------------------------------------------------
Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzling Curiosities
--
Chapters
00:00 Check If A Word Is In A String In Python
00:25 Accepted Answer Score 453
00:35 Answer 2 Score 22
00:53 Answer 3 Score 215
01:19 Answer 4 Score 67
02:02 Thank you
--
Full question
https://stackoverflow.com/questions/5319...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #string
#avk47
    Rise to the top 3% as a developer or hire one of them at Toptal: https://topt.al/25cXVn
--------------------------------------------------
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzling Curiosities
--
Chapters
00:00 Check If A Word Is In A String In Python
00:25 Accepted Answer Score 453
00:35 Answer 2 Score 22
00:53 Answer 3 Score 215
01:19 Answer 4 Score 67
02:02 Thank you
--
Full question
https://stackoverflow.com/questions/5319...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#python #string
#avk47
ACCEPTED ANSWER
Score 453
What is wrong with:
if word in mystring: 
   print('success')
ANSWER 2
Score 215
if 'seek' in 'those who seek shall find':
    print('Success!')
but keep in mind that this matches a sequence of characters, not necessarily a whole word - for example, 'word' in 'swordsmith' is True. If you only want to match whole words, you ought to use regular expressions:
import re
def findWholeWord(w):
    return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search
findWholeWord('seek')('those who seek shall find')    # -> <match object>
findWholeWord('word')('swordsmith')                   # -> None
ANSWER 3
Score 67
If you want to find out whether a whole word is in a space-separated list of words, simply use:
def contains_word(s, w):
    return (' ' + w + ' ') in (' ' + s + ' ')
contains_word('the quick brown fox', 'brown')  # True
contains_word('the quick brown fox', 'row')    # False
This elegant method is also the fastest. Compared to Hugh Bothwell's and daSong's approaches:
>python -m timeit -s "def contains_word(s, w): return (' ' + w + ' ') in (' ' + s + ' ')" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 0.351 usec per loop
>python -m timeit -s "import re" -s "def contains_word(s, w): return re.compile(r'\b({0})\b'.format(w), flags=re.IGNORECASE).search(s)" "contains_word('the quick brown fox', 'brown')"
100000 loops, best of 3: 2.38 usec per loop
>python -m timeit -s "def contains_word(s, w): return s.startswith(w + ' ') or s.endswith(' ' + w) or s.find(' ' + w + ' ') != -1" "contains_word('the quick brown fox', 'brown')"
1000000 loops, best of 3: 1.13 usec per loop
Edit: A slight variant on this idea for Python 3.6+, equally fast:
def contains_word(s, w):
    return f' {w} ' in f' {s} '
ANSWER 4
Score 22
find returns an integer representing the index of where the search item was found. If it isn't found, it returns -1.
haystack = 'asdf'
haystack.find('a') # result: 0
haystack.find('s') # result: 1
haystack.find('g') # result: -1
if haystack.find(needle) >= 0:
  print('Needle found.')
else:
  print('Needle not found.')