Home > Back-end >  Remove empty strings from a list except 1st one in Python
Remove empty strings from a list except 1st one in Python

Time:09-22

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

CodePudding user response:

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

CodePudding user response:

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.

CodePudding user response:

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)



CodePudding user response:

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 != ""
]
  • Related