Conforme relatado por Aziz Alto filter(None, lstr)
, não remove cadeias vazias com um espaço, ' '
mas se você tiver certeza de que o lstr contém apenas cadeias, você pode usarfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Compare o tempo no meu pc
>>> from timeit import timeit
>>> timeit('" ".join(lstr).split()', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
3.356455087661743
>>> timeit('filter(str.strip, lstr)', "lstr=['hello', '', ' ', 'world', ' ']", number=10000000)
5.276503801345825
A solução mais rápida para remover ''
e esvaziar cordas com um espaço ' '
permanece ' '.join(lstr).split()
.
Conforme relatado em um comentário, a situação será diferente se suas sequências contiverem espaços.
>>> lstr = ['hello', '', ' ', 'world', ' ', 'see you']
>>> lstr
['hello', '', ' ', 'world', ' ', 'see you']
>>> ' '.join(lstr).split()
['hello', 'world', 'see', 'you']
>>> filter(str.strip, lstr)
['hello', 'world', 'see you']
Você pode ver que filter(str.strip, lstr)
preserva as strings com espaços, mas as ' '.join(lstr).split()
dividirá.
for x in list
você está usando repetidamente. Se você estiver usando umwhile loop
, tudo bem. o loop demonstrado removerá cadeias vazias até que não haja mais cadeias vazias e depois pare. Na verdade, eu nem sequer olhei para a pergunta (apenas o título), mas respondi exatamente com o mesmo loop que uma possibilidade! Se você não deseja usar compreensões ou filtros para fins de memória, é uma solução muito pitônica.