'Find and delete list elements if matching a string

I have a list of strings stringlist = ["elementOne" , "elementTwo" , "elementThree"] and I would like to search for elements that contain the "Two" string and delete that from the list so my list will become stringlist = ["elementOne" , "elementThree"]

I managed to print them but don't really know how to delete completely from the list using del because i don't know the index or by using stringlist.remove("elementTwo") because I don't know the exact string of the element containing "Two"

My code so far:

for x in stringlist:
   if "Two" in x:
       print(x)


Solution 1:[1]

You can use enumerate to get the index when you iterate over your list (but Note that this is not a pythonic and safe way to modify your list while iterating over it):

>>> for i,x in enumerate(stringlist):
...    if "Two" in x:
...        print(x)
...        del stringlist[i]
... 
elementTwo
>>> stringlist
['elementOne', 'elementThree']

But as a more elegant and pythonic way you can use a list comprehension to preserve the elements that doesn't contains Two :

>>> stringlist = [i for i in stringlist if not "Two" in i]
>>> stringlist
['elementOne', 'elementThree']

Solution 2:[2]

Doing this will help you

for i,x in enumerate(stringlist):
    if "Two" in x:
        del stringlist[i]

or

newList = []
for x in stringlist:
    if "Two" in x:
        continue
    else
        newList.append(x)

Solution 3:[3]

Using regex,

import re

txt = ["SpainTwo", "StringOne"]
for i in txt:
    x = re.search(r"Two", i)
    if x:
        temp_list = temp_list + [x.string] if "temp_list" in locals() else [x.string] 

print(temp_list)

gives

['SpainTwo']

Solution 4:[4]

print(list(filter(lambda x: "Two" not in x, ["elementOne" , "elementTwo" , "elementThree", "elementTwo"])))

Using lambda, if you are only looking to print.

Solution 5:[5]

if you want to check for multiple string and delete if detected from list of string use following method

List_of_string = [ "easyapplyone", "appliedtwotime", "approachednone", "seenthreetime", "oneseen", "twoapproached"]

q = ["one","three"]

List_of_string[:] = [x for x in List_of_string if any(xs not in x for xs in q)]
print(List_of_string)

output:[ "approachednone", "seenthreetime"]

Solution 6:[6]

Well this was pretty simple - sorry for all the trouble

for x in stringlist:
   if "Two" in x:
      stringlist.remove(x)

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2
Solution 3 Subham
Solution 4 Subham
Solution 5 DS_ShraShetty
Solution 6 faceoff