簡體   English   中英

從列表中刪除僅包含空格的字符串

[英]Remove strings containing only white spaces from list

如何從列表中刪除空字符串? 我試過這樣的:

starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']
output = filter(bool, starring)

我想要的輸出:

['Vashu Bhagnani', 'Khemchand Bhagnani',  'Jacky Bhagnani',  'Prashant Shah']

output最終與input相同。 傳遞給filter的正確功能是什么?

只有空字符串的計算結果為False因此您需要使用strip()來刪除任何空格,然后我們可以依賴於非空字符串被評估為true。

>>> starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']                                      
>>> starring = filter(lambda name: name.strip(), starring)
>>> starring
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']

雖然列表理解可能更容易:

>>> [name for name in starring if name.strip()]
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']

您可以刪除尾隨和前導空格,如果只包含那些空格,則會產生空字符串。

列表理解:

l = [x for x in l if x.strip()]

使用filteroperator.methodcaller [docs]

l = filter(operator.methodcaller('strip'), l)

或者更簡單:

l = filter(str.strip, l)

如果您想要向該方法傳遞其他參數, operator.methodcaller將是唯一的方法。

s = ['Vashu Bhagnani', 'Khemchand Bhagnani', '', 'Jacky Bhagnani', '', 'Prashant Shah', '']
[a for a in s if len(a) > 0]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM