compare list elment to a string

Viewed 59

I have the following list

l=['web','python']

and the following string

st='python, C, something, find' 

I want to check if any element in the list is in the string

I tried using

any(x in l for x in st) 

however it gives false

seems python can't recognize the element in the string, is there a way to check elements from list to a string if there is a match. i did it successfully using a for a loop and splitting the string to a list however that is not efficient with the real data as it contain a long lists and strings. need something efficient. thanks

4 Answers

You would first need to split the string, or else you will be iterating over the individual characters.

Try this:

l=['web','python']
st='python, C, something, find'

any([x in l for x in st.split(',')]) # True

But this isn't the most efficient. For better performance, you could take a look into using a trie.

If your would like to check if any element in the list is in the string then your code should be

any(x in st for x in l)

You can use this method

word_list = ['web','python']
string = 'python, C, something, find'   

exist = filter(lambda x : x in string , word_list)
print(list(exist))

output:

['python']

You were close. How about:

any(x in l for x in st.replace(',', '').split())

which returns:

True

A different approach:

import re
re.search(r'\b(' + '|'.join(l) + r')\b', st)

The search will return None if there's no match and the match if there is one. You can use it like:

if re.search(r'\b(' + '|'.join(l) + r')\b', st):
    print(f'there was a match: {t.groups()}')
else:
    print('no match')
Related