Питон удаляет не все пробелы из списка
Я создал функцию, которая должна убирать пробелы в списках. Она работает, но частично.
my_list = [1, " ", 2, " ", " ", 3, " ", " ", " ", 4, " ", " ", " ", " ", 5] # Мой список
def remove_spaces (list_): # Функция, которая удаляет пробелы из списка
for i in list_: # Через этот цикл я перебераю список на наличие пробелов и удаляю их
if i == " ":
list_.remove(i)
else:
pass
return list_ # Возвращаю изменённый список
print (remove_spaces(my_list)) # Вывожу на экран
# Должно получиться: [1, 2, 3, 4, 5]
# Но он возвращает: [1, 2, 3, 4, ' ', ' ', ' ', ' ', 5]
Ответы (1 шт):
Автор решения: Georgiy
→ Ссылка
Такая проблема появляется при итерации списка и одновременном удалении элементов из него, так как индекс уменьшается, особенно это наглядно видно, если попытаться взаимодействовать с элементами списка.
Ниже пример кода, который выбросит ошибку:
my_list = [1, " ", 2, " ", " ", 3, " ", " ", " ", 4, " ", " ", " ", " ", 5]
# в ходе итерации проитерирует по 7 элементам и выбросит ValueError: list.remove(x): x not in list
for i, j in enumerate(my_list):
print(i, j)
if j == " ":
my_list.remove(i)
Есть несколько способов решить проблему:
Первый способ создать копию списка, по нему итерировать и удалять элементы из другого
my_list = [1, " ", 2, " ", " ", 3, " ", " ", " ", 4, " ", " ", " ", " ", 5]
def remove_spaces(list_):
iter_list = list_.copy()
for i in iter_list:
if i == " ":
list_.remove(i)
return list_
print(remove_spaces(my_list))
Второй способ создать новый список по условию и его вернуть.
my_list = [1, " ", 2, " ", " ", 3, " ", " ", " ", 4, " ", " ", " ", " ", 5]
def remove_spaces(list_):
new_list = []
for i in list_:
if i != " ":
new_list.append(i)
return new_list
print(remove_spaces(my_list))
Через генератор-выражение:
my_list = [1, " ", 2, " ", " ", 3, " ", " ", " ", 4, " ", " ", " ", " ", 5]
def remove_spaces(list_):
return [i for i in list_ if i != " "]
print(remove_spaces(my_list))