Перейти к содержимому

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

  • автор:

Как с помощью 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)

Как из списка удалить пустые списки?

Удалите пустые списки из списка строк
Доброго времени суток, столкнулся с такой задачей. Задача максимально лёгкая, но у меня возникли.

Удалить из заданного списка пустые списки
Помогите, пожалуйста, на Scheme: удалить из заданного списка пустые списки

Удалить все пустые элементы из списка списков
Дан список списков (List<List<string>>) , из него надо удалить все пустые списки. В простом.

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

4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570

1 2 3 4 5
>>> ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []] >>> ls = list(filter(None, ls)) >>> ls [['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 ']] >>>

Регистрация: 30.10.2013
Сообщений: 2
а мне тут подсказали можно сделать так, какой из вариантов оптимальней даже и не знаю

ls = [x for x in ls if x]

4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570

ЦитатаСообщение от allozar Посмотреть сообщение

какой из вариантов оптимальней даже и не знаю

выбирать нужно между filter() и включением
я сравнил через timeit: на небольших списках твой немного быстрее, а на больших списках твой медленнее в два раза
(а с del вообще в десять раз медленнее твоего)

Добавлено через 3 минуты

[guest@localhost py]$ ./timecmp.py [0.22660166999958165, 0.22645385499981785, 0.22690548299942748] [0.5606995429998278, 0.5607934289992045, 0.5594335770001635] [1.7001144109999586, 1.7018712059998506, 1.7051744469999903] [guest@localhost py]$

мой
твой
твой с del
Регистрация: 11.09.2016
Сообщений: 2

Вопрос сходный, но более глубокий.
Мне требуется из вложенных списков удалить строки типа ‘ ‘.
Фильтрация

h= filter(lambda x: x !='', b)

и перебор через IF

1 2 3 4 5 6 7 8
for w in b: for elem in w: if elem != '': b[b.index(w)][w.index(elem)]=elem elif elem == '': w.pop(w.index(elem)) else: w.remove(elem)

Как полностью убрать пустые элементы из строк?

Эксперт Python

5415 / 3839 / 1214
Регистрация: 28.10.2013
Сообщений: 9,554
Записей в блоге: 1
Могу предложить пересоздание списка.

1 2 3 4 5 6 7 8 9 10 11
ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '],[]] ls2 = [] for i in range(len(ls)): ls2.append([]) for el in ls[i]: if el != '': ls2[i].append(el) ls = ls2 del ls2 print(ls) # [[], [], ['1 ', 'en'], ['2 '], ['3 ', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []]

Эксперт С++

8385 / 6147 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
WhiteSadKat, через рекурсию

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
def clear(l): for e in l: if isinstance(e, list): clear(e) if isinstance(e, str) and len(e) == 0: l.remove(e) def main(): a = [1, "", 2, ["3", "", "4", ["5", "", "6"], "7"], "8", "", "9"] clear(a) print(a) if __name__ == "__main__": main()

2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
import timeit def test1(): data = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []] for i, sequence in enumerate(data): if all(sequence): continue for j, elem in enumerate(sequence): if not elem: del data[i][j] def test2(): ls = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []] ls2 = [] for i in range(len(ls)): ls2.append([]) for el in ls[i]: if el != '': ls2[i].append(el) ls = ls2 del ls2 def test3(): def clear(l): for e in l: if isinstance(e, list): clear(e) if isinstance(e, str) and len(e) == 0: l.remove(e) data = [[], [], ['1 ', 'en', ''], ['2 '], ['3 ', '', '100'], ['4 '], ['5 '], ['6 '], ['7 '], ['8 '], []] clear(data) print(timeit.timeit("test1()", setup="from __main__ import test1", number=100000)) print(timeit.timeit("test2()", setup="from __main__ import test2", number=100000)) print(timeit.timeit("test3()", setup="from __main__ import test3", number=100000))

Удалить пустые строки из списка строк в Python

В этом посте мы обсудим, как удалить пустые строки из списка строк в Python.

1. Использование filter() функция

Рекомендуемое решение — использовать встроенную функцию filter(function, iterable) , который строит iterator из элементов iterable для которого указано функция возвращает истину. Если функция None , предполагается тождественная функция, т. е. все элементы iterable, которые являются ложными, удаляются. Вот рабочий пример с использованием фильтров:

if __name__ == ‘__main__’ :
l = [ ‘A’ , ‘B’ , » , ‘C’ , » , ‘D’ ]
l = list ( filter ( None , l ) )
print ( l ) # [‘A’, ‘B’, ‘C’, ‘D’]

Вы также можете пройти len функция для фильтрации пустых строк из списка, как показано ниже:

if __name__ == ‘__main__’ :
l = [ ‘A’ , ‘B’ , » , ‘C’ , » , ‘D’ ]
l = list ( filter ( len , l ) )
print ( l ) # [‘A’, ‘B’, ‘C’, ‘D’]

2. Использование понимания списка

Вы также можете использовать понимание списка для удаления пустых строк из списка строк. Понимание списка состоит из выражения, за которым следует цикл for, за которым следует необязательный цикл for или оператор if, заключенные в квадратные скобки. [] . Обратите внимание, что это решение медленнее, чем подход с фильтром.

if __name__ == ‘__main__’ :
l = [ ‘A’ , ‘B’ , » , ‘C’ , » , ‘D’ ]
l = [ s for s in l if s ]
print ( l ) # [‘A’, ‘B’, ‘C’, ‘D’]

3. Использование join() с split() функция

Выражение ‘ ‘.join(iterable).split() может использоваться для фильтрации пустых значений из итерации. ‘ ‘.join(list) эффективно объединить список строк, разделенных пробелом. затем split() Функция вызывается для результирующей строки, которая возвращает список строк, в которых последовательные пробелы считаются одним разделителем.

if __name__ == ‘__main__’ :
l = [ ‘A’ , ‘B’ , » , ‘C’ , » , ‘D’ ]
l = ‘ ‘ . join ( l ) . split ( )
print ( l ) # [‘A’, ‘B’, ‘C’, ‘D’]

4. Использование list.remove() функция

The list.remove(«») удаляет только первое вхождение пустой строки из списка. Чтобы удалить все вхождения пустой строки из списка, вы можете воспользоваться тем фактом, что она вызывает ValueError когда он не может найти указанный элемент в списке. Идея состоит в том, чтобы многократно вызывать remove() функционировать до тех пор, пока не возникнет ValueError исключение. Это показано ниже:

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

Отфильтровать пустые строки можно или с помощью filter() или генератора списков.

l = ['foo', '', 'bar', '', '', 'biz'] list(filter(None, l)) # ['foo', 'bar', 'biz'] [x for x in l if x] # ['foo', 'bar', 'biz'] 

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

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