python实用库之filter()

介绍

filter()函数的用法
在现实的工作学习中,我们时常要处理序列数据,如列表、字典、字符串、元组、集合等,这些序列数据中往往有很多元素是无效数据,或者我们只需要从中筛选出部分具有代表性的数据,实现这种功能的方式有很多种,利用python的内置函数**filter()**以很方便地实现对序列数据进行过滤。
filter()函数的语法格式如下:

newIter = Type(filter(function, iterable))

function 和 iterable 分别是判断函数以及待过滤的对象,这里面的function可以根据实际需求自定义的设计,也可以为None。
在Python3中,filter() 的返回的是一个迭代器对象,可以用 list()、tuple() 等方法获取过滤后得到的新序列。

实例

一、 下面通过几个实例来演示 filter() 函数的用法。比如说,定义一个 list 变量,里边放置若干学生的成绩信息(包括语文、数学和英语)。要求使用 filter() 函数筛选出能参加数学竞赛的学生名单。
如何认定一个学生的单科能力呢?我们可能要多方位考虑,单科成绩特别优秀固然是我们需要考虑的对象,但综合成绩优秀也不应该被舍弃,因为可能别的科目分散了学生的部分精力。因此,针对这个案例我们可以这样设计过滤的逻辑:

  • 数学单科98分以上
  • 数学单科95分以上
    • 没有不及格科目
  • 平均分90以上
    • 数学单科成绩不低于85分

代码实现

scores = [ ("Emma", 89 , 99 , 59),
      ("Edith", 99 , 86 , 94),
      ("Sophia", 99 , 60 , 20),
      ("May", 100 , 95 , 59),
      ("Ashley", 89 , 90 , 59),
      ("Arny", 89 , 90, 69),
      ("Lucy", 79 , 90 , 59 ),
      ("Gloria", 85 , 90 , 59),
      ("Abby", 88 , 91 , 90)]

def handle_filter(a):
    for i in range(len(scores)):
    	if scores[i][2]>=98:
    		return True
    	elif scores[i][2]>=95:
    		if scores[i][1]>=60 and scores[i][3]>=60:
    			return True
    	elif scores[i][2]>=85:
    		if sum(scores[i][1:])/3>=90:
    			return True
    	return False
newIter = list(filter(handle_filter, scores))
print(newIter)

输出结果为:

[('Emma', 89, 99, 59), ('Edith', 99, 86, 94)]

此程序中,自定义的 handle_filter()是针对实际需求设计的过滤逻辑,作为 filter() 的第一个参数,根据实际需求可以灵活变通。在 Python 3.x 中 filter() 函数最终输出的是迭代器对象,因此还需要借助 list() 内置函数,将其转化为列表。

二、 python 中有个内置函数 lambda ,他可以在不指定函数名称的情况下定义一些简单逻辑的函数,可以定义一个函数给变量。Python 中的 lambda 函数是内联函数和匿名函数,这些函数可以与 filter 方法一起使用。
让我们通过一个简单的示例来了解如何将两者结合使用。请参阅以下 Python 代码。

array = [11, 23, 13, 4, 15, 66, 7, 8, 99, 10]
new_array = list(filter(lambda x : x <= 20, array))
print("Old Array:", array)
print("New Array:", new_array)

输出:

Old Array: [11, 23, 13, 4, 15, 66, 7, 8, 99, 10]
New Array: [11, 13, 4, 15, 7, 8, 10]

像一些比较简单的过滤功能,我们都可以通过lambda 函数来实现,比如需要从字符串列表中过滤出所有长度为5的字符串。

array = ["hello", "python", "world", "walking", "sleep", "shelter", "food"]
new_array = list(filter(lambda x : len(x) == 5, array))
print("Old Array:", array)
print("New Array:", new_array)

输出:

Old Array: ['hello', 'python', 'world', 'walking', 'sleep', 'shelter', 'food']
New Array: ['hello', 'world', 'sleep']
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值