高阶函数map_reduce_sorted_filter

能够把函数当成参数传递的参数就是高阶函数

map

map:
功能: 拿iterable的每一个元素放入func中,
     func的返回值放入迭代器内进行返回

参数: iterable, func
返回: 迭代器

# ["a","c","b"]  => [97,99,98]
dictvar = {97:"a",98:"b",99:'c',100:'d',101:'e'} 
def func(x):
    print(1)
    for k, v in dictvar.items():
        if v == x:
            return k
li  = ["a","c","b"]
res = map(func, li)
print(list(res))

reduce

# 需要导入
from functools import  reduce
"""
功能: 第一次拿出iterable的元素, 放入func中进行计算
     计算结果再和iterable的下一个元素传入func进行计算, 
     以此类推直到最后一个,计算的结果作为返回值返回
参数: func iterable
返回: 最后一次调用func的计算结果

"""

# (1)[5,4,8,8]   =>   整型5488
li = [5,4,8,8]
def func(x, y):
   return x*10 + y
res = reduce(func, li)
print(res)

sorted

"""
功能: 把iterable的每一个元素放入func中获取返回值,
     按照返回值对原元素进行排序(不会修改原变量)
参数: iterable, reverse(False默认从小到大), key=func
返回值: 排序后的一个列表

如果func返回值一样, 就按照字面顺序不动

[-1, -11, 99, 89] 余数都是9, 
排序后与原列表保持一致(无论正序倒序)
"""

listvar = (3.14,56,-9,1)
res = sorted(listvar, reverse=False) # 小到大
res = sorted(listvar, reverse=True) # 大到小 
print(res)

# 使用abs()进行绝对值排序
listvar = [-1,99,78,-33]
res = sorted(listvar, reverse=True, key=abs)
print(res)

# 按照余数排序
def func(x):
   return x % 10 
listvar = [-1,99,78,-33]
res = sorted(listvar, key=func)    
print(res)

filter

filter
"""
功能: 过滤,
   把iterable的每一个元素依次放入func, 
   返回True就保留, 返回False就丢弃
参数: func, iterable
返回: 过滤后的迭代器
"""

listvar = [1,2,3,4,5,6,7,8,9]
# 过滤所有的奇数 要偶数
def func(x):
   if x % 2==0:
      return True
   return False

res = filter(func, listvar)
print(list(res))


# 使用lambda简化
res = filter(lambda x : True if x%2==0 else False, listvar)

print(list(res))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容