python的filter函数

filter函数使用,目的是清除一个序列中的空字符串

def empty(s):
    return s and s.strip()
print(list(filter(empty,["A","","B","   "," C "])))

运行结果是这样的['A', 'B', ' C ']
问题1:and连接," C "不应该被filter函数返回吧
对这个理解是:这个and是怎么清除空字符串呢?它也清除了" ",但是把" C "返回了。与我刚开始理解的:s.strip之后,与原s通过and连接不符合true不返回相矛盾,因为" C "返回了

return s and s.strip()

这个问题首先要明白这句代码的意思。
如果字符串里全是空格,则 s.strip()会变成一个空字符串,而空字符串必然返回false,所以就等于把“全是空格”的字符串给去掉了。
如果s本身就是空字符串,也会从列表中去除。

下有代码,可直接复制使用。如有帮助,敬请采纳,你的采纳是我前进的动力,O(∩_∩)O谢谢!!!!!!!!
路过的朋友也可以点个赞~(≧▽≦)/~

print(list(filter(lambda x: x != '', map(lambda x: x and x.strip(), ["A", "", "B", "   ", " C "]))))

filter()函数用于过滤序列,过滤掉不符合条件的元素,返回符合条件的元素组成新列表。
" C " and " C ".strip()为True啊

老哥想要的答案应该是这个,s.strip()返回的依然是字符串,所以需要再加个判断即可,具体代码如下:

def empty(s):
    return s and s.strip() == s
print(list(filter(empty,["A","","B","   "," C "])))
 
给你找了一篇非常好的博客,你可以看看是否有帮助,链接:如何使用Python的filter函数