Python filter()内置函数用法详解
对序列数据进行过滤是个很常用的功能,Python 中提供了一个 filter() 内置函数,其可以很方便地实现对序列数据进行过滤。
filter() 函数的语法格式如下:
如何认定学生是否偏科呢?符合如下其中一条的学生,将被视为偏科:
实现代码如下:
filter() 函数的语法格式如下:
newIter = filter(function, iterable)
其中,各个参数的含义如下:- function:可传递一个用于判断的函数,也可以将该参数设置为 None。
- iterable:可迭代对象,包括列表、元组、字典、集合、字符串等。
- newIter:在 Python 2.x 中,该函数返回过滤后得到的新列表;而在 Python 3.x 中,该函数返回一个迭代器对象,可以用 list()、tuple() 等方法获取过滤后得到的新序列。
下面通过一个实例来演示 filter() 函数的用法。比如说,定义一个 list 变量,里边放置若干学生的成绩信息(包括语文、数学和英语)。要求使用 filter() 函数筛选出偏科的学生名单。正因为该函数是根据自定义的过滤函数进行过滤操作,所以支持更加灵活的过滤规格。
如何认定学生是否偏科呢?符合如下其中一条的学生,将被视为偏科:
- 有 2 科成绩在 80 分以上,有一科在 60 分以下。
- 有 1 科成绩在 90 分以上,另外 2 科成绩都在 60 分以下。
- 有 1 科成绩在 90 分以上,但三科的平均分在 70 分以下。
实现代码如下:
scores = [ ("Emma", 89 , 90 , 59), ("Edith", 99 , 49 , 59), ("Sophia", 99 , 60 , 20), ("May", 40 , 94 , 59), ("Ashley", 89 , 90 , 59), ("Arny", 89 , 90, 69), ("Lucy", 79 , 90 , 59 ), ("Gloria", 85 , 90 , 59), ("Abby", 89 , 91 , 90)] def handle_filter(a): s = sorted(a[1: ]) #对三科成绩进行排序 #有 2 科成绩在 80 分以上,并且有 1 科在 60 分以下的 if s[-2] > 80 and s[0] < 60 : return True #有 1 科成绩在 90 分以上,另外 2 科成绩都在 60 分以下 if s[-1] > 90 and s[1] < 60 : return True if s[-2] > 80 and sum(s)/len(s) < 60: #有 1 科成绩在 90 分以上, 且 3 科的平均分在 70 分以下 return True return False newIter = list(filter(handle_filter, scores)) print(newIter)输出结果为:
[('Emma', 89, 90, 59), ('Edith', 99, 49, 59), ('May', 40, 94, 59), ('Ashley', 89, 90, 59), ('Gloria', 85, 90, 59)]
此程序中,将自定义的 handle_filter() 函数作为 filter() 函数的第一个参数,用于过滤 scores 列表。由于在 Python 3.x 中 filter() 函数最终输出的是迭代器对象,因此还需要借助 list() 内置函数,将其转化为列表。所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频