Comme indiqué par Aziz Alto filter(None, lstr)
ne supprime pas les chaînes vides avec un espace ' '
mais si vous êtes sûr que lstr ne contient que des chaînes, vous pouvez utiliserfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Comparer le temps sur mon 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
La solution la plus rapide pour supprimer ''
et vider les chaînes avec un espace ' '
reste ' '.join(lstr).split()
.
Comme indiqué dans un commentaire, la situation est différente si vos chaînes contiennent des espaces.
>>> 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']
Vous pouvez voir que filter(str.strip, lstr)
conserver les chaînes avec des espaces, mais ' '.join(lstr).split()
diviser ces chaînes.
for x in list
Si vous utilisez unwhile loop
alors c'est très bien. la boucle démontrée supprimera les chaînes vides jusqu'à ce qu'il n'y ait plus de chaînes vides, puis s'arrêtera. En fait, je n'avais même pas regardé la question (juste le titre) mais j'ai répondu avec la même boucle exacte que possible! Si vous ne voulez pas utiliser de compréhensions ou de filtres pour la mémoire, c'est une solution très pythonique.