filter使用python3代码进行迭代元素很难吗?
来源 :中华考试网 2020-12-03
中我们通常说使用函数对列表进行筛选,有多少小伙伴能够理解筛选的原理呢?今天小编为大家带来了新朋友filter函数,相较于以往能实现筛选功能的函数来说是复杂的,这也算是对于一些有难度函数学习的考验。我们会着重于探讨filter函数筛选后的返回值,对于返回值的迭代进行一些原理的分析。
filter用于过滤筛选可迭代对象中的元素,如果符合条件则返回对应的元素序列(类型为filter),filter接受两个参数,一个是函数用于筛选元素,返回值为True或Flase,另一个是可迭代对象。
filter用法
evens = filter(is_odd, range(-5, 10))
print(list(evens))
示例结果:
[2, 4, 6, 8]
filter函数的返回值是一个可迭代对象,这一点很关键,这也是为什么我说filter函数是高级语法的原因。
为什么不返回列表?,如果返回的是列表,那么在filter函数执行过程中,就必须对列表里的每一个数据进行对2取模运算,这样很浪费空间,因此filter在实现时采用了迭代器技术,将计算延迟到对filter函数返回结果进行遍历时才进行。
怎么验证上面的说法呢,对代码稍加修改
from collections import Iterable
python课程免费试听预约
- 地区:
- 北京
- 天津
- 上海
- 江苏
- 浙江
- 山东
- 江西
- 安徽
- 广东
- 广西
- 海南
- 辽宁
- 吉林
- 黑龙江
- 内蒙古
- 山西
- 福建
- 河南
- 河北
- 湖南
- 湖北
- 四川
- 重庆
- 云南
- 贵州
- 新疆
- 西藏
- 陕西
- 青海
- 宁夏
- 甘肃
- 姓名:
- 手机:
def func(x):
print("接收参数" + str(x))
return x%2 == 0
lst = [1, 2, 5, 6, 7]
res = filter(func, lst)
# res 是一个可迭代对象
print(isinstance(res, Iterable), type(res))
for item in res:
print(item)
现在,我不使用lambda表达式对数据进行判断,而是使用自由度更高的函数,在函数func中,我输出接收到的参数,如果对lst数据中的过滤发生执行filter函数期间,那么,在输出res类型之前,就会执行函数func中的print语句,现在来看程序实际的执行结果
True
接收参数1
接收参数2
2
接收参数5
接收参数6
6
接收参数7
程序输出结果表明,在执行filter函数时,并没有调用func函数对lst中的数据进行过滤,而是在对res进行遍历时才调用func函数进行过滤。
在filter函数返回的问题上我们又进行了深入的探索,用代码分析了为什么返回不是列表的原因。
如今python编程语言市场需求大,薪资待遇上万尽在咫尺!如果你也想学习python技术可以填写下面表单,Python学习资料限时免费领取!