If you want exact matches of words then consider word tokenizing the target string. I use the recommended word_tokenize from nltk:
from nltk.tokenize import word_tokenize
Here is the tokenized string from the accepted answer:
a_string = "A string is more than its parts!"
tokens = word_tokenize[a_string]
tokens
Out[46]: ['A', 'string', 'is', 'more', 'than', 'its', 'parts', '!']
The accepted answer gets modified as follows:
matches_1 = ["more", "wholesome", "milk"]
[x in tokens for x in matches_1]
Out[42]: [True, False, False]
As in the accepted answer, the word "more" is still matched. If "mo" becomes a match string, however, the accepted answer still finds a match. That is a behavior I did not want.
matches_2 = ["mo", "wholesome", "milk"]
[x in a_string for x in matches_1]
Out[43]: [True, False, False]
Using word tokenization, "mo" is no longer matched:
[x in tokens for x in matches_2]
Out[44]: [False, False, False]
That is the additional behavior that I wanted. This answer also responds to the duplicate question here.
We are given a String and our task is to test if the string contains elements from the list.
Example:
Input: String: Geeks for Geeks is one of the best company. List: ['Geeks', 'for'] Output: Does string contain any list element : True
Naive Approach checking each word in the string
Here we are splitting the string into list of words and then matching each word of this list with the already present list of words we want to check.
Python3
test_string
=
"There are 2 apples for 4 persons"
test_list
=
[
'apples'
,
'oranges'
]
print
[
"The original string : "
+
test_string]
print
[
"The original list : "
+
str
[test_list]]
test_string
=
test_string.split[
" "
]
flag
=
0
for
i
in
test_string:
for
j
in
test_list:
if
i
=
=
j:
flag
=
1
break
if
flag
=
=
1
:
print
[
"String contains the list element"
]
else
:
print
[
"String does not contains the list element"
]
Output:
The original string : There are 2 apples for 4 persons The original list : ['apples', 'oranges'] String contains the list element
Using list comprehension to check if string contains element from list
This problem can be solved using the list comprehension, in this, we check for the list and also with string elements if we can find a match, and return true, if we find one and false is not using the conditional statements.
Python3
test_string
=
"There are 2 apples for 4 persons"
test_list
=
[
'apples'
,
'oranges'
]
print
[
"The original string : "
+
test_string]
print
[
"The original list : "
+
str
[test_list]]
res
=
[ele
for
ele
in
test_list
if
[ele
in
test_string]]
print
[
"Does string contain any list element : "
+
str
[
bool
[res]]]
Output:
The original string : There are 2 apples for 4 persons The original list : ['apples', 'oranges'] Does string contain any list element : True
Using any[] to check if string contains element from list
Using any function is the most classical way in which you can perform this task and also efficiently. This function checks for match in string with match of each element of list.
Python3
test_string
=
"There are 2 apples for 4 persons"
test_list
=
[
'apples'
,
'oranges'
]
print
[
"The original string : "
+
test_string]
print
[
"The original list : "
+
str
[test_list]]
res
=
any
[ele
in
test_string
for
ele
in
test_list]
print
[
"Does string contain any list element : "
+
str
[res]]
Output:
The original string : There are 2 apples for 4 persons The original list : ['apples', 'oranges'] Does string contain any list element : True
Using find[] method to check if string contains element from list
Here we are using the find[] method to check the occurrence of the word and it returns -1 if the word does not exist in the list.
Python3
test_string
=
"There are 2 apples for 4 persons"
test_list
=
[
'apples'
,
'oranges'
]
print
[
"The original string : "
+
test_string]
print
[
"The original list : "
+
str
[test_list]]
res
=
False
c
=
0
for
i
in
test_list:
if
[test_string.find[i]!
=
-
1
]:
c
+
=
1
if
[c>
=
1
]:
res
=
True
print
[
"Does string contain any list element : "
+
str
[
bool
[res]]]
Output:
The original string : There are 2 apples for 4 persons The original list : ['apples', 'oranges'] Does string contain any list element : True