四、对可迭代对象的操作
3、 对可迭代对象的操作
3.1 filter
在python 2 的时候是内置函数,python3修改成了一个内置类
-
语法:
filter(__function,__object)
__function:函数
__object:可迭代对象
filter根据输入的函数来过滤可迭代对象,得到的是一个filter类型的对象。
filter对象也是一个可迭代对象
filter 对可迭代对象进行过滤,得到的是一个filter对象
ages = [12,23,30,17,16,22,19]
x = filter(lambda a: a > 18,ages)
print(type(x)) #<class 'filter'>
for a in x:
print(a,end = ' ') #23 30 22 19
3.2 map
-
语法:
map(__function,__object)
__function:函数
__object:可迭代对象
map根据输入的函数来对可迭代对象进行相应的操作,然后得到一个map类型的对象,该对象也是一个可迭代对象
map根据输入的函数参数来对输入的可迭代对象参数进行操作
ages = [12,23,30,17,16,22,19]
x = map(lambda a: a - 2,ages)
print(type(x)) #<class 'map'>
print(list(x)) #[10, 21, 28, 15, 14, 20, 17]
3.3 reduce
reduce以前是一个内置函数,现在在一个模块中
内置函数和内置类都在 builtin.py 文件中
-
导入reduce模块的语法:
from functools import reduce
-
reduce 语法:
reduce(__function,__object,初始值)
__function:函数
__object:可迭代对象
初始值 : int
根据指定的函数对可迭代对象进行相加或相减操作,如果没有指定初始值,则默认没有初始值。
from functools import reduce
ages = [12,23,30,17,16,22,19]
x = reduce(lambda a,b: a - b,ages)
#将列表中的数据进行减法,从第一个开始减到最后一个
print(type(x)) #<class 'int'>
print(list(x)) #-115
x = reduce(lambda a,b: a + b,ages)
#将列表中的数据进行加法,从第一个开始加到最后一个
print(x) #139
#对列表嵌套字典进行操作,利用到初始值
from functools import reduce
a = [
{'name':'zhangsan','age':18,'height':180},
{'name':'zhangsan1','age':19,'height':175},
{'name':'zhangsan2','age':21,'height':177},
{'name':'zhangsan3','age':22,'height':171},
{'name':'zhangsan4','age':15,'height':165}
]
def zzw(a,b):
return a + b['age']
print(reduce(zzw,a,0)) #95
'''
1. 起初 zzw(a,b) 函数中 a = 0 , b = a[0]
2. 然后进行 a + b['age'] ==> 0 + a[0]['age'] ==> 0 + 18 得出 18
3. 然后将 18 赋值给a,此刻b为a[1],继续带入 a + b['age'] 直到可迭代对象结束
简化写法:
print(reduce(lambda x,y: x + y['age'],a,0))
'''