How to check if a string is a substring of items in a list of strings?

PythonStringList

Python Problem Overview


I have a list:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

and want to search for items that contain the string 'abc'. How can I do that?

if 'abc' in my_list:

would check if 'abc' exists in the list but it is a part of 'abc-123' and 'abc-456', 'abc' does not exist on its own. So how can I get all items that contain 'abc'?

Python Solutions


Solution 1 - Python

If you only want to check for the presence of abc in any string in the list, you could try

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
if any("abc" in s for s in some_list):
    # whatever

If you really want to get all the items containing abc, use

matching = [s for s in some_list if "abc" in s]

Solution 2 - Python

Just throwing this out there: if you happen to need to match against more than one string, for example abc and def, you can combine two comprehensions as follows:

matchers = ['abc','def']
matching = [s for s in my_list if any(xs in s for xs in matchers)]

Output:

['abc-123', 'def-456', 'abc-456']

Solution 3 - Python

Use filter to get at the elements that have abc.

>>> lst = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
>>> print filter(lambda x: 'abc' in x, lst)
['abc-123', 'abc-456']

You can also use a list comprehension.

>>> [x for x in lst if 'abc' in x]

By the way, don't use the word list as a variable name since it is already used for the list type.

Solution 4 - Python

If you just need to know if 'abc' is in one of the items, this is the shortest way:

if 'abc' in str(my_list):

Note: this assumes 'abc' is an alphanumeric text. Do not use it if 'abc' could be just a special character (i.e. []', ).

Solution 5 - Python

This is quite an old question, but I offer this answer because the previous answers do not cope with items in the list that are not strings (or some kind of iterable object). Such items would cause the entire list comprehension to fail with an exception.

To gracefully deal with such items in the list by skipping the non-iterable items, use the following:

[el for el in lst if isinstance(el, collections.Iterable) and (st in el)]

then, with such a list:

lst = [None, 'abc-123', 'def-456', 'ghi-789', 'abc-456', 123]
st = 'abc'

you will still get the matching items (['abc-123', 'abc-456'])

The test for iterable may not be the best. Got it from here: https://stackoverflow.com/questions/1952464/in-python-how-do-i-determine-if-a-variable-is-iterable

Solution 6 - Python

x = 'aaa'
L = ['aaa-12', 'bbbaaa', 'cccaa']
res = [y for y in L if x in y]

Solution 7 - Python

for item in my_list:
    if item.find("abc") != -1:
        print item

Solution 8 - Python

any('abc' in item for item in mylist)

Solution 9 - Python

I am new to Python. I got the code below working and made it easy to understand:

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for item in my_list:
    if 'abc' in item:
       print(item)

Solution 10 - Python

Use the __contains__() method of Pythons string class.:

a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
for i in a:
    if i.__contains__("abc") :
        print(i, " is containing")

Solution 11 - Python

If you want to get list of data for multiple substrings

you can change it this way

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
# select element where "abc" or "ghi" is included
find_1 = "abc"
find_2 = "ghi"
result = [element for element in some_list if find_1 in element or find_2 in element] 
# Output ['abc-123', 'ghi-789', 'abc-456']

Solution 12 - Python

I needed the list indices that correspond to a match as follows:

lst=['abc-123', 'def-456', 'ghi-789', 'abc-456']

[n for n, x in enumerate(lst) if 'abc' in x]

output

[0, 3]

Solution 13 - Python

mylist=['abc','def','ghi','abc']

pattern=re.compile(r'abc') 

pattern.findall(mylist)

Solution 14 - Python

Adding nan to list, and the below works for me:

some_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456',np.nan]
any([i for i in [x for x in some_list if str(x) != 'nan'] if "abc" in i])

Solution 15 - Python

my_list = ['abc-123', 'def-456', 'ghi-789', 'abc-456']

for item in my_list:
    if (item.find('abc')) != -1:
        print ('Found at ', item)

Solution 16 - Python

I did a search, which requires you to input a certain value, then it will look for a value from the list which contains your input:

my_list = ['abc-123',
        'def-456',
        'ghi-789',
        'abc-456'
        ]

imp = raw_input('Search item: ')

for items in my_list:
    val = items
    if any(imp in val for items in my_list):
        print(items)

Try searching for 'abc'.

Solution 17 - Python

def find_dog(new_ls):
    splt = new_ls.split()
    if 'dog' in splt:
        print("True")
    else:
        print('False')

        
find_dog("Is there a dog here?")

Solution 18 - Python

Question : Give the informations of abc

    a = ['abc-123', 'def-456', 'ghi-789', 'abc-456']
    
    
    aa = [ string for string in a if  "abc" in string]
    print(aa)

Output =>  ['abc-123', 'abc-456']

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSandyBrView Question on Stackoverflow
Solution 1 - PythonSven MarnachView Answer on Stackoverflow
Solution 2 - PythonfantabolousView Answer on Stackoverflow
Solution 3 - PythonMAKView Answer on Stackoverflow
Solution 4 - PythonRogerSView Answer on Stackoverflow
Solution 5 - PythonRobert MuilView Answer on Stackoverflow
Solution 6 - PythonMariyView Answer on Stackoverflow
Solution 7 - PythonRubyconView Answer on Stackoverflow
Solution 8 - PythonImranView Answer on Stackoverflow
Solution 9 - PythonAmol ManthalkarView Answer on Stackoverflow
Solution 10 - PythonHarsh LodhiView Answer on Stackoverflow
Solution 11 - PythonLakhani AlirazaView Answer on Stackoverflow
Solution 12 - PythonGrant ShannonView Answer on Stackoverflow
Solution 13 - Pythonarun_munagalaView Answer on Stackoverflow
Solution 14 - PythonSam SView Answer on Stackoverflow
Solution 15 - PythonChandragupta BorkotokyView Answer on Stackoverflow
Solution 16 - PythonJayson OgsoView Answer on Stackoverflow
Solution 17 - PythonRaja Ahsan ZebView Answer on Stackoverflow
Solution 18 - PythonSoudipta DuttaView Answer on Stackoverflow