0

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

4 Answers 4

2

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)



Sign up to request clarification or add additional context in comments.

Comments

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

Comments

1

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.

Comments

1

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.