Seperti dilansir Aziz Alto filter(None, lstr)
tidak menghapus string kosong dengan spasi ' '
tetapi jika Anda yakin lstr hanya berisi string yang dapat Anda gunakanfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Bandingkan waktu di pc saya
>>> 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
Solusi tercepat untuk menghapus ''
dan mengosongkan string dengan spasi ' '
tetap ada' '.join(lstr).split()
.
Seperti yang dilaporkan dalam komentar situasinya berbeda jika string Anda berisi spasi.
>>> 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']
Anda dapat melihat bahwa filter(str.strip, lstr)
menyimpan string dengan spasi di atasnya tetapi ' '.join(lstr).split()
akan membagi string ini.
for x in list
Jika Anda menggunakanwhile loop
maka tidak apa-apa. loop yang ditunjukkan akan menghapus string kosong hingga tidak ada lagi string kosong dan kemudian berhenti. Sebenarnya saya bahkan belum melihat pertanyaan (hanya judulnya) tetapi saya menjawab dengan kemungkinan yang sama persis! Jika Anda tidak ingin menggunakan pemahaman atau filter demi memori, ini adalah solusi yang sangat pythonic.