从列表中移除仅包含空白的字符串
我想知道怎么从一个列表中删除空字符串。我试过这样做:
starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']
output = filter(bool, starring)
我想要的输出是:
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']
但是最后的output
和input
是一样的。请问我应该给filter
传递什么正确的函数呢?
3 个回答
0
在编程中,有时候我们需要让程序做一些事情,比如计算、显示信息或者处理数据。为了让程序能够理解我们的指令,我们需要用一种特定的语言来写这些指令,这就是编程语言。
编程语言就像我们日常使用的语言一样,只不过它们有自己的一套规则和语法。就像我们说话时需要遵循语法规则一样,编程时也需要遵循编程语言的规则。
在写代码的时候,我们可能会遇到一些问题,比如代码运行不正常或者出现错误。这时候,我们需要仔细检查代码,看看哪里写错了,或者是否有遗漏的部分。
有时候,其他人也会遇到类似的问题,这时候他们会在网上提问,比如在StackOverflow这样的论坛上。其他程序员会根据他们的问题提供帮助和建议。
总之,编程就像是给计算机下指令,让它按照我们的想法去做事情。虽然一开始可能会觉得有点复杂,但只要多练习,就会越来越熟练。
s = ['Vashu Bhagnani', 'Khemchand Bhagnani', '', 'Jacky Bhagnani', '', 'Prashant Shah', '']
[a for a in s if len(a) > 0]
9
你可以去掉字符串前后的空格,如果字符串里只有空格的话,结果会变成一个空字符串。
使用列表推导式:
l = [x for x in l if x.strip()]
用 filter
和 operator.methodcaller
[文档]:
l = filter(operator.methodcaller('strip'), l)
或者更简单的方法:
l = filter(str.strip, l)
如果你想给方法传递额外的参数,只有 operator.methodcaller
是可行的。
25
只有空字符串会被认为是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']