Removing an item from list matching a substring
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']
This should work:
[i for i in sents if not ('@$\t' in i or '#' in i)]
If you want only things that begin with those specified sentential use the str.startswith(stringOfInterest)
method
Another technique using filter
filter( lambda s: not (s[0:3]=="@$\t" or s[0]=="#"), sents)
The problem with your orignal approach is when you're on list item i
and determine it should be deleted, you remove it from the list, which slides the i+1
item into the i
position. The next iteration of the loop you're at index i+1
but the item is actually i+2
.
Make sense?