Aziz Alto tarafından bildirildiği gibi filter(None, lstr)
bir boşluk ile boş dizeleri kaldırmaz ' '
ama lstr sadece dize içerdiğinden eminseniz kullanabilirsinizfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
Bilgisayarımdaki zamanı karşılaştır
>>> 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
''
Dizeleri boşlukla kaldırmak ve boşaltmak için en hızlı çözüm ' '
kalır ' '.join(lstr).split()
.
Yorumda bildirildiği gibi, dizeleriniz boşluk içeriyorsa durum farklıdır.
>>> 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']
Üzerinde filter(str.strip, lstr)
boşluk bulunan dizeleri koruduğunuzu ancak ' '.join(lstr).split()
bu dizeleri bölebileceğini görebilirsiniz.
for x in list
bir kullanıyorsanızwhile loop
o zaman 's cezası. gösterilen döngü, boş dizge kalmayana kadar boş dizeleri kaldıracak ve sonra duracaktır. Aslında soruya bile bakmadım (sadece başlık) ama bir olasılıkla aynı döngü ile cevap verdim! Bellek için anlama veya filtreler kullanmak istemiyorsanız, bu çok pitonik bir çözümdür.