Remove empty strings from a list except 1st one in Python

Question:

I am trying to remove empty strings from a list except the 1st element. I have this code –

my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', '']
while("" in my_list[1:]) :
  my_list.remove("")
print(my_list)

But I am not getting the desires result. It’s still removing the 1st element. The result I am looking for is –

['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1']

But I am getting –

['CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1']
Asked By: Katrina Marrie

||

Answers:

You can use:

my_list = [my_list[0]] + [item for item in my_list[1:] if item != ""]

This code works by simply combining the result of the first element in the list [my_list[0]] with the filtered result you desire: [item for item in my_list[1:] if item != ""].

The problem is that .remove will remove the first element from the list despite your while statement.

Answered By: Kraigolas

You could also do something like this

enumerates() gets both the element and the index in a for loop.


for i,e in enumerate(my_list):
    if e == '' and i != 0:
        my_list.pop(i)



Answered By: Lost_coder
my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', '']
out = [el for i, el in enumerate(my_list) if i == 0 or el]
print(out)
['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1']
Answered By: Алексей Р

Use enumerate() to get the index: Avoid removing index 0

my_list = ['', 'CHANGE_TO(1)', 'x', 'x', 'x', 'x', 'x', '1', '']
my_list = [
    element 
    for index, element in enumerate(my_list)
    if index > 0 and element != ""
]
Answered By: Hai Vu