Удалить пустые строки из списка строк - PullRequest
586 голосов
/ 02 октября 2010

Я хочу удалить все пустые строки из списка строк в Python.

Моя идея выглядит следующим образом:

while '' in str_list:
    str_list.remove('')

Есть ли еще какой-нибудь питонный способ сделать это?1006 *

Ответы [ 14 ]

0 голосов
/ 15 сентября 2017

Для устранения пустых мест после зачистки:

slist = map(lambda s: s and s.strip(), slist)
slist = filter(None, slist)

Некоторые PRO:

  • Ленивый, на основе генераторов, для экономии памяти;
  • достойная понятностькод;
  • быстро, выборочно используя встроенные функции и понимания.

    def f1(slist):
        slist = [s and s.strip() for s in slist]
        return list(filter(None, slist))
    
    def f2(slist):
        slist = [s and s.strip() for s in slist]
        return [s for s in slist if s]
    
    
    def f3(slist):
        slist = map(lambda s: s and s.strip(), slist)
        return list(filter(None, slist))
    
    def f4(slist):
        slist = map(lambda s: s and s.strip(), slist)
        return [s for s in slist if s]
    
    %timeit f1(words)
    10000 loops, best of 3: 106 µs per loop
    
    %timeit f2(words)
    10000 loops, best of 3: 126 µs per loop
    
    %timeit f3(words)
    10000 loops, best of 3: 165 µs per loop
    
    %timeit f4(words)
    10000 loops, best of 3: 169 µs per loop
    
0 голосов
/ 18 мая 2016

filter(None, str) не удаляет пустые строки с пробелом '', а только удаляет '' и ''.

join(str).split() удаляет оба.но если ваш элемент списка имеет пробел, то он изменит ваши элементы списка также потому, что он сначала объединяет все ваши элементы списка, а затем разбивает их на пробелы, поэтому вы должны использовать: -

str = ['hello', '', ' ', 'world', ' ']
print filter(lambda x:x != '', filter(lambda x:x != ' ', str))

Это удалит оба ине будет влиять и на ваши элементы Нравится: -

str = ['hello', '', ' ', 'world ram', ' ']
print  ' '.join(lstr).split()
print filter(lambda x:x != '', filter(lambda x:x != ' ', lstr))

вывод: -

['hello', 'world', 'ram'] <-------------- вывод <code>' '.join(lstr).split()
['hello', 'world ram']

0 голосов
/ 03 февраля 2016
str_list = ['2', '', '2', '', '2', '', '2', '', '2', '']

for item in str_list:
    if len(item) < 1:  
        str_list.remove(item)

Коротко и сладко.

0 голосов
/ 02 октября 2010

Перебрать существующий список строк, а затем проверить наличие пустой строки, если она не пустая, заполнить новый список строк непустыми значениями, а затем заменить старый список строк новым списком строк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...