yosef ali
yosef ali

Reputation: 33

compare list elment to a string

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

Upvotes: 2

Views: 75

Answers (4)

keithpjolley
keithpjolley

Reputation: 2263

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')

Upvotes: 0

xio
xio

Reputation: 640

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']

Upvotes: 1

ssblack
ssblack

Reputation: 21

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)

Upvotes: 2

lnogueir
lnogueir

Reputation: 2085

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.

Upvotes: 2

Related Questions