Jak donosi Aziz Alto filter(None, lstr)
, nie usuwa pustych łańcuchów ze spacją, ' '
ale jeśli jesteś pewien, że lstr zawiera tylko łańcuch, którego możesz użyćfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Porównaj czas na moim komputerze
>>> 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
Pozostaje najszybsze rozwiązanie do usuwania ''
i opróżniania łańcuchów ze spacją .' '
' '.join(lstr).split()
Jak podano w komentarzu, sytuacja wygląda inaczej, jeśli ciągi znaków zawierają spacje.
>>> 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']
Możesz zobaczyć, że filter(str.strip, lstr)
zachowaj ciągi ze spacjami, ale ' '.join(lstr).split()
podzieli to ciągi.
for x in list
Jeśli używasz,while loop
to jest w porządku. pokazana pętla usunie puste ciągi, dopóki nie będzie już pustych ciągów, a następnie zatrzyma się. Właściwie nawet nie spojrzałem na pytanie (tylko tytuł), ale odpowiedziałem dokładnie taką samą pętlą jak to możliwe! Jeśli nie chcesz używać wyrażeń ani filtrów ze względu na pamięć, jest to bardzo pytoniczne rozwiązanie.