Wie von Aziz Alto berichtet filter(None, lstr)
, werden leere Zeichenfolgen nicht mit einem Leerzeichen entfernt. ' '
Wenn Sie jedoch sicher sind, dass lstr nur Zeichenfolgen enthält, können Sie diese verwendenfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Vergleiche die Zeit auf meinem 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
Die schnellste Lösung zum Entfernen ''
und Leeren von Zeichenfolgen mit einem Leerzeichen ' '
bleibt bestehen ' '.join(lstr).split()
.
Wie in einem Kommentar berichtet, ist die Situation anders, wenn Ihre Zeichenfolgen Leerzeichen enthalten.
>>> 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']
Sie können sehen, dass filter(str.strip, lstr)
Zeichenfolgen mit Leerzeichen beibehalten ' '.join(lstr).split()
werden, diese Zeichenfolgen jedoch aufgeteilt werden.
for x in list
Sie iterieren. Wenn Sie eine verwenden,while loop
ist dies in Ordnung. Die gezeigte Schleife entfernt leere Zeichenfolgen, bis keine leeren Zeichenfolgen mehr vorhanden sind, und stoppt dann. Ich hatte mir die Frage (nur den Titel) nicht einmal angesehen, aber ich antwortete mit genau der gleichen Schleife wie möglich! Wenn Sie aus Gründen des Gedächtnisses keine Verständnisse oder Filter verwenden möchten, ist dies eine sehr pythonische Lösung.