Как удалить пустые элементы из списка python
Перейти к содержимому

Как удалить пустые элементы из списка python

  • автор:

Удаление элементов списка по условию

Из списка чисел удалить элементы, значения которых принадлежат определенному диапазону (например, больше 35-ти и меньше 65-ти). Удаляемые значения сохранить в другом списке.

Решение задачи на языке программирования Python

Алгоритм решения задачи выглядит простым. Достаточно перебрать элементы списка и удалить те, которые удовлетворяют условию. Однако при удалении элемента на его место становится следующий, но поскольку мы переходим к следующей ячейке, то пропускаем проверку того, что стал на место удаленного. Таким образом, цикл for , в теле которого перебираются элементы, использовать нельзя, так как меняется количество элементов списка.

a = [96, 72, 44, 29, 97, 69, 25, 12] print("A =", a) b = [] for i in a: if 20  i  90: a.remove(i) b.append(i) print("A =", a) print("B =", b)
A = [96, 72, 44, 29, 97, 69, 25, 12] A = [96, 44, 97, 25, 12] B = [72, 29, 69]

В примере число 44 оказалось пропущенным, так как когда было удалено 72, то 44 стало на его место. На следующей итерации цикла проверялось содержимое третьей ячейки, в которой уже стояло число 29. То же самое касается числа 25, перед которым было удалено 69.

В Python удалять элементы списка можно не только с помощью метода remove , также инструкцией del , при которой указывается сам список и индекс удаляемого элемента.

Также будем использовать цикл while , измеряя на каждой его итерации длину списка, индекс же увеличивать только в том случае, если удаления элемента не произошло.

import random a = [] for i in range(10): n = round(random.random() * 100) a.append(n) print("A =", a) b = [] i = 0 while i  len(a): if 35  a[i]  65: b.append(a[i]) del a[i] else: i += 1 print("A =", a) print("B =", b)

Примеры выполнения программы:

A = [66, 57, 72, 65, 37, 67, 23, 16, 30, 72] A = [66, 72, 65, 67, 23, 16, 30, 72] B = [57, 37]
A = [1, 65, 85, 62, 2, 1, 52, 63, 36, 94] A = [1, 65, 85, 2, 1, 94] B = [62, 52, 63, 36]

Более оригинальным способом решения задачи является перебор элементов списка с конца. В этом случае индекс меняется от большего к меньшему. При этом если происходит удаление элемента и сокращение длины списка, это не оказывает никакого влияния на элементы (их индексы), стоящие до удаляемого значения.

from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] i = len(a) - 1 while i >= 0: if 35  a[i]  65: b.insert(0, a[i]) del a[i] i -= 1 print("A =", a) print("B =", b)

Здесь вместо метода append() используется insert() , чтобы элементы во втором списке шли в том же порядке, в котором они были в первом, а не задом наперед.

В случае перебора с конца также можно использовать цикл for , если знать о том, что с помощью функции range() можно создавать диапазоны от большего числа к меньшему.

from random import randint a = [randint(0, 99) for j in range(10)] print("A =", a) b = [] for i in range(len(a)-1, -1, -1): if 35  a[i]  65: b.insert(0, a[i]) del a[i] print("A =", a) print("B =", b)

Выражение range(len(a)-1, -1, -1) при длинне списка a в 10 элементов означает, что будет получен диапазон, первый элемент которого 9, последний 0 (значение -1 в диапазон не входит). Третий аргумент в функции range() является шагом, то есть здесь следующий элемент получается из предыдущего вычитаем единицы.

X Скрыть Наверх

Решение задач на Python

Удаление всех пустых элементов из списка

Почему мой код не удаляет последний пустой элемент в списке?

templist = ['', 'hello', '', 'hi', 'mkay', '', ''] for element in templist: if element == '': templist.remove(element) print (templist) 
['hello', 'hi', 'mkay', ''] 

Поделиться Источник 14 ноября 2016 в 21:37

4 ответа

Ну, вы всегда можете просто сделать это:

new_list = list(filter(None, templist)) 

Поделиться 14 ноября 2016 в 21:40

Потому что вы изменяете список, который перебирается. Подумайте о нем так, как будто цикл for перебирается с помощью индекса; удаление элементов уменьшает длину списка, тем самым, недействительно удаляя индексы > len(list) — 1 .

«Питоническое» решение для этого — использовать генератор списка:

templist = ['', 'hello', '', 'hi', 'mkay', '', ''] templist[:] = [item for item in templist if item != ''] 

Это выполняет на месте удаление элементов из списка.

Поделиться 14 ноября 2016 в 21:44

Чтобы указать на вашу ошибку, перебирая копию списка, то есть изменяя оператор for на:

for element in templist[:]: 

Изменение списка во время перебора по нему приводит к нечетным результатам, которые вы видите.

Более компактно, вы можете использовать filter для этого:

templist = list(filter(None, templist)) 

когда в него добавляется None , он просто возвращает элементы, которые являются истинными (пустые строки оцениваются как false).

Поделиться 14 ноября 2016 в 21:39

Вы можете создать новый список с именем wordGrabber , например, и вместо удаления пробелов вы можете заполнить свой новый список содержимым

templist = ['', 'hello', '', 'hi', 'mkay', '', ''] for element in templist: if element != '': wordGrabber.append(element) print (wordGrabber) 

Как удалить пустые строки из файла python

Удалить пустые строки можно считав все строки из файла, отфильтровать пустые, и записать новый файл.

cat file.txt # foobar # # fizzbazz # helloworld! # # python # # hexlet # with open('file.txt') as f: lines = f.readlines() non_empty_lines = (line for line in lines if not line.isspace()) with open('new_file.txt', 'w') as n_f: n_f.writelines(non_empty_lines) cat new_file.txt # foobar # fizzbazz # helloworld! # python # hexlet 

Как с помощью python удалить все пустые строки в файле?

idontgetit

Dr. Bacon, Это сайт для помощи начинающим в том числе. Если бы мой вопрос шёл против правил сайта, он был бы удалён.

Решения вопроса 0
Ответы на вопрос 5

hottabxp

Сергей Карбивничий @hottabxp Куратор тега Python
Сначала мы жили бедно, а потом нас обокрали..

5ff9ca3523c0e975314901.png

Скорее всего программирование — это не ваше, так как вы не смогли выбрать что-то по вашей проблеме из 260тис. результатов.
Как с помощью python удалить все пустые строки в файле?

Ответ написан более трёх лет назад
Комментировать
Нравится 3 Комментировать

Pavlmir

Любознательный

str_whith_space = """ example line 1 example line 2 example line 3 example line 4""" new_str = '\n'.join(el.strip() for el in str_whith_space.split('\n') if el.strip()) print(new_str)

«»»
example line 1
example line 2
example line 3
example line 4
«»»
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать

Jossnix

Что-то типа того

with open(file_name, 'r') as f1: lines = f1.readlines() new_llnes = [] for line in lines: if (len(lines.strip())): new_llnes.append[line] with open(new_file_name, 'w') as f2: f2.writelines(new_llnes)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *