ตามที่รายงานโดยAziz Alto filter(None, lstr)
ไม่ได้ลบสตริงว่างที่มีช่องว่าง' '
แต่ถ้าคุณแน่ใจว่า lstr มีเฉพาะสตริงที่คุณสามารถใช้ได้filter(str.strip, lstr)
>>> lstr = ['hello', '', ' ', 'world', ' ']
>>> lstr
['hello', '', ' ', 'world', ' ']
>>> ' '.join(lstr).split()
['hello', 'world']
>>> filter(str.strip, lstr)
['hello', 'world']
เปรียบเทียบเวลาบนพีซีของฉัน
>>> 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
วิธีที่เร็วที่สุดที่จะลบ''
และว่างเปล่าสตริงที่มีพื้นที่ส่วนที่เหลือ' '
' '.join(lstr).split()
ตามที่รายงานไว้ในความคิดเห็นสถานการณ์จะแตกต่างกันถ้าสตริงของคุณมีช่องว่าง
>>> 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']
คุณจะเห็นว่าfilter(str.strip, lstr)
รักษาสตริงด้วยช่องว่าง แต่' '.join(lstr).split()
จะแบ่งสตริงนี้
for x in list
หากคุณกำลังใช้งานอยู่while loop
มันก็ใช้ได้ การวนซ้ำที่แสดงจะลบสตริงว่างจนกว่าจะไม่มีสตริงว่างแล้วหยุด ที่จริงฉันไม่ได้ดูที่คำถาม (แค่ชื่อ) แต่ฉันตอบด้วยวงเดียวที่แน่นอนเป็นไปได้! หากคุณไม่ต้องการใช้ความเข้าใจหรือตัวกรองเพื่อความจำ