Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Removing elements from a list containing specific characters [duplicate]

I want to remove all elements in a list which contains (or does not contain) a set of specific characters, however I'm running in to problems iterating over the list and removing elements as I go along. Two pretty much equal examples of this is given below. As you can see, if two elements which should be removed are directly following each other, the second one does not get removed.

Im sure there are a very easy way to do this in python, so if anyone know it, please help me out - I am currently making a copy of the entire list and iterating over one, and removing elements in the other...Not a good solution I assume

>>> l ['1', '32', '523', '336'] >>> for t in l: ...     for c in t: ...         if c == '2': ...             l.remove(t) ...             break ...              >>> l ['1', '523', '336'] >>> l = ['1','32','523','336','13525'] >>> for w in l: ...     if '2' in w: l.remove(w) ...      >>> l ['1', '523', '336'] 

Figured it out:

>>> l = ['1','32','523','336','13525'] >>> [x for x in l if not '2' in x] ['1', '336'] 

Would still like to know if there is any way to set the iteration back one set when using for x in l though.

like image 515
Vidar Avatar asked Aug 05 '10 15:08

Vidar


People also ask

How do I remove a specific item from a list?

The remove() method removes the first matching element (which is passed as an argument) from the list. The pop() method removes an element at a given index, and will also return the removed item. You can also use the del keyword in Python to remove an element or slice from a list.


1 Answers

List comprehensions:

>>> l = ['1', '32', '523', '336'] >>> [ x for x in l if "2" not in x ] ['1', '336'] >>> [ x for x in l if "2" in x ] ['32', '523'] 
like image 59
MattH Avatar answered Oct 13 '22 15:10

MattH