ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

mep reduce filter sorted 匿名函数 以及递归的应用

2020-12-16 20:36:45  阅读:171  来源: 互联网

标签:函数 迭代 reduce filter mep print sorted lambda


四大高阶函数

  • map
  • reduce
  • filter
  • sorted

目标

掌握map函数、reduce函数、filter函数、sorted函数


步骤

1.map函数
  • 根据提供的函数对指定序列做映射
map(function, iterable, ...)
  • 使用可迭代对象(指定的序列)中的每个元素调用函数,将返回值作为新可迭代对象元素;返回值为新的可迭代对象。
def my_add(item):
    return item + 10

result = map(my_add, [1,2,3,4,5,6])

result2 = list(result)
print(result2)
  • map函数的参数第一个为自定义的函数,这里没有括号
  • 第二个参数不仅仅是列表类型,只要为可迭代对象即可
  • map函数的返回值为map类型,如果想要拿到里面的数据,①可以使用list()强转;②for循环遍历
2.reduce函数
  • 对指定的序列内的元素进行累积
reduce(function, sequence [, initial] ) -> value

function参数是一个有两个参数的函数,reduce依次从sequence中取一个元素,和上一次调用function的结果做参数再次调用function`。

from functools import reduce

def my_add(a, b):
    return a * b

result = reduce(my_add, [1,2,3,4])
print(result)
  • reduce需要先进行导入模块 functools import reduce
  • 定义函数,此函数需要有两个参数(规则函数)
  • reduce(函数名, 序列)
  • reduce返回的结果为int类型,可以直接使用

3.filter函数
  • 根据条件,过滤掉不符合条件的元素,最终返回一个迭代器对象
list01 = [1,2,3,4,5,6,7,8,9]


def find_num(item):
    if item % 2 == 0:
        return True
    else:
        return False
  • filter函数的作用:
  • 将可迭代对象的元素依次传入的指定的函数中,如果可迭代对象的单个元素传入后,函数返回True,则这个元素被保留下来,如果一个元素传入函数后,函数返回False,则这个元素被抛弃掉,最终保留下来的所有元素放置到一个迭代器中,filter可以实现筛选的功能。
4.sorted函数
  • 对所有可迭代对象进行排序操作
sorted(iterable,  key=abs,  reverse=False)
  • sort 与 sorted 之间的区别
sort 是应用在list上的方法,sorted可以对所有可迭代喜爱那个进行排序操作

list 的 sort 方法返回的是对已经存在的列表进行操作,而内建的函数sorted 方法返回的是一个新的list,而不是在原来的基础上进行的操作。
# t1 = (1,2,6,8,5,4,3)
# ret = tuple(sorted(t1))
# print(ret)


s = "adfskjlsjafuz"
ret = sorted(s)
print(ret)
  • 匿名函数
  • lambda表达式

步骤

1.匿名函数的介绍

定义函数使用def关键字, python还提供一种生成函数对象的表达式形式---匿名函数(lambda表达式)

lambda表达式能创建一个可调用的函数, 其返回函数本身而不是赋值给一个变量名, 这就是为什么lambda称之为匿名函数的原因.

2.匿名函数的格式
lambda表达式的语法:
       lambda argument_list: expression
  • argument_list是参数列表。他的结构与Python函数中的参数列表是一样的,expression是一个关于参数的表达式,并且他们一定是单行的。

  • 代码案例

def my_add(num1, num2):
    print(num1 + num2)

my_add(10, 20)


# lambda 表达式来完成
f = lambda num1, num2: print(num1+num2)
f(10, 20)
f(20, 30)
3.匿名函数的案例
list01 = [10,20,5,4,63,72]

def find_max(obj):
    print(max(obj))

find_max(list01)

f = lambda obj: print(max(obj))
f(list01)
1.什么是递归
  • 将问题分解为规模更小的相同问题,
  • 持续分解,直到问题规模小到可以用非常简单直 接的方式来解决。
  • 递归的问题分解方式非常独特,其算法方面的明
  • 显特征就是:在算法流程中调用自身。
2.问题回顾

给定一个列表,返回所有数的和。

(既不能使用for,又不能使用while,同时还不确定列表的长度)

该如何设计代码程序

3.问题分析
  • 求和实际上最终是由一次次的加法实现的,而加法恰恰有2个操作数
  • 将问题规模较大的列表求和,分解为规模较小而且固定的2个数求和(加法)?
  • 同样是求和问题,但规模发生了变化,符合递归解决问题的特征!
4.换个方式来思考

1 + (3 + (5 + ((7 + 9))))

观察上述过程中所包含的重复模式,可以把求和问题归纳

数列的和 = “首个数” + “余下数列” 的 和

如果数列包含的数少到只有1个的话,它的和就是这个数了 (这是规模小到可以做最简单的处理)

 

标签:函数,迭代,reduce,filter,mep,print,sorted,lambda
来源: https://www.cnblogs.com/PythonDaniu/p/14146020.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有