从列表中移除仅包含空白的字符串

16 投票
3 回答
18201 浏览
提问于 2025-04-17 08:03

我想知道怎么从一个列表中删除空字符串。我试过这样做:

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

我想要的输出是:

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

但是最后的outputinput是一样的。请问我应该给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()]

filteroperator.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']

撰写回答