Theo báo cáo của Aziz Alto filter(None, lstr)
không xóa chuỗi trống bằng dấu cách ' '
nhưng nếu bạn chắc chắn lstr chỉ chứa chuỗi bạn có thể sử dụngfilter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
So sánh thời gian trên máy tính của tôi
>>> 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
Giải pháp nhanh nhất để loại bỏ ''
và chuỗi trống với một khoảng trống ' '
vẫn còn ' '.join(lstr).split()
.
Như đã báo cáo trong một bình luận, tình huống sẽ khác nếu chuỗi của bạn chứa khoảng trắng.
>>> 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']
Bạn có thể thấy rằng filter(str.strip, lstr)
bảo tồn các chuỗi có khoảng trắng trên đó nhưng ' '.join(lstr).split()
sẽ phân tách chuỗi này.
for x in list
Nếu bạn đang sử dụngwhile loop
thì không sao. vòng lặp được trình diễn sẽ loại bỏ các chuỗi rỗng cho đến khi không còn chuỗi trống nào nữa rồi dừng lại. Tôi thực sự thậm chí đã không nhìn vào câu hỏi (chỉ tiêu đề) nhưng tôi đã trả lời với cùng một vòng lặp như một khả năng! Nếu bạn không muốn sử dụng hiểu hoặc bộ lọc vì bộ nhớ, thì đó là một giải pháp rất hay.