Removing an item from list matching a substring

alvas picture alvas · Oct 1, 2012 · Viewed 40.4k times · Source

How do I remove an element from a list if it matches a substring?

I have tried removing an element from a list using the pop() and enumerate method but seems like I'm missing a few contiguous items that needs to be removed:

sents = ['@$\tthis sentences needs to be removed', 'this doesnt',
     '@$\tthis sentences also needs to be removed',
     '@$\tthis sentences must be removed', 'this shouldnt',
     '# this needs to be removed', 'this isnt',
     '# this must', 'this musnt']

for i, j in enumerate(sents):
  if j[0:3] == "@$\t":
    sents.pop(i)
    continue
  if j[0] == "#":
    sents.pop(i)

for i in sents:
  print i

Output:

this doesnt
@$  this sentences must be removed
this shouldnt
this isnt
#this should
this musnt

Desired output:

this doesnt
this shouldnt
this isnt
this musnt

Answer

D.Shawley picture D.Shawley · Oct 1, 2012

How about something simple like:

>>> [x for x in sents if not x.startswith('@$\t') and not x.startswith('#')]
['this doesnt', 'this shouldnt', 'this isnt', 'this musnt']