Python 从列表中删除仅包含空格的字符串

Python 从列表中删除仅包含空格的字符串,python,Python,如何从列表中删除空字符串?我试着这样做: starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' '] output = filter(bool, starring) 我想要的输出: ['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah'] 但是输出结果与

如何从列表中删除空字符串?我试着这样做:

starring = ['Vashu Bhagnani', 'Khemchand Bhagnani', ' ', 'Jacky Bhagnani', ' ', 'Prashant Shah', ' ']
output = filter(bool, starring)
我想要的输出:

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

但是
输出结果与
输入结果相同。传递给
过滤器
的正确函数是什么?

您可以删除尾随空格和前导空格,如果它只包含这些空格,则会生成空字符串

列表理解:

l = [x for x in l if x.strip()]
使用
过滤器
和:

或更简单:

l = filter(str.strip, l)

operator.methodcaller
是向方法传递附加参数的唯一方法。

只有空字符串的计算结果为
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']

,你的问题是什么?可能与你发布的内容重复?“这对我很有用。”费利克斯·克林。代码更新。
''
中有一个空格。空格的计算结果为True,因此如果不需要空格,则必须编写一个自定义比较函数来处理该问题或使用列表理解。一定要看Blender提到的帖子。那是因为你错过了原始字符串中第三个元素的空格。该元素不是空字符串。@MartinFrost-这是在编辑问题之前出现的,但发布的代码以任何方式工作。现在在任何情况下都会更新。您不需要
bool
;也就是说,
过滤器(lambda name:name.strip(),带星号)
可以工作。不过,无论哪种方式,结果都是一样的。您也不需要lambda,您只需
筛选(str.strip,starring)
;-)@DaveWebb在您的第二个代码片段中,为什么
name.strip()
会返回
True
False
?我喜欢
l=filter(operator.methodcaller('strip'),l)
感谢使用
operator.methodcaller('strip')
而不是只做
str.strip
(str strip,l)
)?@David:我不知道str.strip
能起作用,但仔细想想,似乎是合理的。谢谢我想当你想传递额外的参数时,你会使用
operator.methodcaller
。另外
operator.methodcaller
不会在unicode字符串和列表中的其他东西上失败,也就是说,它更适合pythonic duck类型。这对空白字符串不起作用,应该删除空白字符串。
>>> [name for name in starring if name.strip()]
['Vashu Bhagnani', 'Khemchand Bhagnani', 'Jacky Bhagnani', 'Prashant Shah']
s = ['Vashu Bhagnani', 'Khemchand Bhagnani', '', 'Jacky Bhagnani', '', 'Prashant Shah', '']
[a for a in s if len(a) > 0]