Check if multiple strings exist in another string
any()
is by far the best approach if all you want is True
or False
, but if you want to know specifically which string/strings match, you can use a couple things.
If you want the first match (with False
as a default):
match = next((x for x in a if x in str), False)
If you want to get all matches (including duplicates):
matches = [x for x in a if x in str]
If you want to get all non-duplicate matches (disregarding order):
matches = {x for x in a if x in str}
If you want to get all non-duplicate matches in the right order:
matches = []for x in a: if x in str and x not in matches: matches.append(x)
You should be careful if the strings in a
or str
gets longer. The straightforward solutions take O(S*(A^2)), where S
is the length of str
and A is the sum of the lenghts of all strings in a
. For a faster solution, look at Aho-Corasick algorithm for string matching, which runs in linear time O(S+A).