Python中利用filter过滤假值与空字符串详解
本文详解Python中filter函数的两种用法。当第一个参数为None时,自动剔除None、False、0及空序列等假值;若需进一步处理含空格字符串或进行特定替换,可传入自定义函数或lambda表达式,实现更灵活的列表过滤与数据清洗。
Python中假值的定义
在 Python 中,以下对象会被判定为布尔假值:
None # None值
False # False值
0 # 数值零不管它是int,float还是complex类型
'',(),[] # 任何一个空的序列
{} # 空的集合
使用filter过滤假值
若需从列表剔除上述假值元素,可直接使用内置函数 filter 并将第一个参数设为 None。
首先可查看 filter 函数的帮助文档以了解其基本用法。
>>> help(filter)
Help on built-in function filter in module __builtin__:
filter(...)
filter(function or None, sequence) -> list, tuple, or string
Return those items of sequence for which function(item) is true. If
function is None, return the items that are true. If sequence is a tuple
or string, return the same type, else return a list.
>>>
根据上述文档说明,filter 的第一个参数可以是任意函数,也可以指定为 None。
自定义函数的过滤应用
当第一个参数指定为具体函数时:
>>> def odd(n):
... return n % 2 == 1
...
>>> filter(odd, range(10)) # 第一个参数为一般函数
[1, 3, 5, 7, 9]
>>>
>>> filter(lambda x: x % 2 == 0, range(10)) # 第一个参数为匿名函数
[0, 2, 4, 6, 8]
若第一个参数设为 None,则默认行为是移除序列中所有布尔值为假的元素。
>>> L = [1,'',0,'A',None,[1,2],False,3.14,[],{'a':1}, {}]
>>> filter(None, L)
[1, 'A', [1, 2], 3.14, {'a': 1}]
>>>
复杂场景下的字符串处理
若需求更复杂,例如需过滤 False 值,同时将空格字符串替换为 "default",可结合 map 与 filter 实现:
>>> L = [[], 1, "", None, False, {}, 3.14, " "]
>>> map(lambda x:x if x != " " else "default", filter(None, L))
[1, 3.14, 'default']
若需进一步处理,即既要剔除假值,又要移除如 ' ', " " 等包含空格的字符串,前述简单方法不再适用。此时需增加一个处理函数来识别并过滤内含一个或多个空字符的元素:
>>> L = [1,'',0,'A'," ", None,[1,2],False,3.14,[],{'a':1}, {}]
>>> filter(lambda s: s and (type(s) != str or len(s.strip()) > 0), L)
[1, 'A', [1, 2], 3.14, {'a': 1}]
>>>
以上这篇在Python中使用filter去除列表中值为假及空字符串的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









