Removing elements from a list containing specific characters

PythonListData Structures

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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']

Solution 2 - Python

If I understand you correctly,

[x for x in l if "2" not in x]

might do the job.

Solution 3 - Python

In addition to @Matth, if you want to combine multiple statements you can write:

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

Solution 4 - Python

Problem you could have is that you are trying to modify the sequence l same time as you loop over it in for t loop.

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
QuestionVidarView Question on Stackoverflow
Solution 1 - PythonMattHView Answer on Stackoverflow
Solution 2 - PythonloevborgView Answer on Stackoverflow
Solution 3 - PythonJ.DoeView Answer on Stackoverflow
Solution 4 - PythonTony VeijalainenView Answer on Stackoverflow