python过滤器filter()及lambda表达式的应用

发布时间 2023-07-10 14:34:11作者: No九五二七9527

一、filter()方法介绍:

filter() 是 Python 内置的一个函数,用于根据指定的条件对可迭代对象进行筛选,返回符合条件的元素。

filter() 函数的语法如下:

filter(function, iterable)

其中 function 是一个函数或可调用对象,表示用于判断每个元素是否符合条件的函数。iterable 则是一个可迭代对象,表示需要进行筛选的数据集合。

filter() 函数会遍历 iterable 中的每个元素,依次将它们传入 function 进行判断。如果 function 返回的结果为真(非零、非空、True),则该元素被保留到结果中;否则被过滤掉。

二、结合re模块及lambda表达式的应用:

pattern = "☠" +realname+ "☠"  # 限定边界 
           
filtered_tuples = list(filter(lambda string: re.search(pattern, string), filtered_tuples0))  

 

如实例所示,该表达是的目的是,从filtered_tuples0列表中过滤出匹配pattern 内容(即"☠" +realname2[1]+ "☠" )字符串,然后将过滤出的信息注入filtered_tuples 列表中。

需要注意的是,如果被筛选的目标里面的每一条内容不是字符串或类似字节对象的参数,执行会报错的。

这里为什么会使用re模块(re 模块是 Python 标准库中的正则表达式模块,用于处理字符串的模式匹配),是为了准确匹配pattern所代表的字符串。

为什么呢?——比如 ,过滤的内容集里面包含字符串“zliu”、“czliu”、“dzliu”,如果没有边界限制和re匹配,就会在过滤“zliu”的时候过滤出所有含有“zliu”的内容,包括“zliu”、“czliu”、“dzliu”,而不是只有目标内容“zliu”。

这里通过"☠" +realname+ "☠" 表达式把realname限定起来是因为我的数据中是通过"☠"符号链接的数据,可以左右有效的边界。如果是被过滤的集里面就只是字符串,那就用"\b"限定边界。即pattern = "\b" +realname+ "\b",当过滤条件为“zliu”时,就会把“zliu”当做一个整体,作为某一部分出现的时候将不再匹配(“mzliu”、“czliu”、“dzliu”)。