lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找
一. 匿名函数
为了解决一些简单的需求而设计的一句话函数. lambda表示的是匿名函数. 不需要用def来声明, 一句话就可以声明出一个函数
语法: 函数名 = lambda 参数: 返回值
a = lambda x, y: x + y # lambda 匿名函数 一行搞定一个函数. 但是, 不能完成复杂的函数操作
print(a(2, 5)) #
print(a.__name__) #
b = lambda x, y: x * y
print(b(4, 5)) #
与sorted()在一起用
lst = [{'id': 1, 'name': 'jack', 'age': 18},
{'id': 2, 'name': 'tom', 'age': 55},
{'id': 3, 'name': 'jerry', 'age': 33},
{'id': 4, 'name': 'steve', 'age': 22},
{'id': 5, 'name': 'ben', 'age': 18},
]
l1 = sorted(lst, key=lambda dic:dic['age']) #根据列表里的字典的年龄大小来排序
print(l1)
# [{'id': 1, 'name': 'jack', 'age': 18}, {'id': 5, 'name': 'ben', 'age': 18},
# {'id': 4, 'name': 'steve', 'age': 22}, {'id': 3, 'name': 'jerry', 'age': 33},
# {'id': 2, 'name': 'tom', 'age': 55}]
与filter()一起用
lst = [{'id': 1, 'name': 'jack', 'age': 18},
{'id': 2, 'name': 'tom', 'age': 55},
{'id': 3, 'name': 'jerry', 'age': 33},
{'id': 4, 'name': 'steve', 'age': 44},
{'id': 5, 'name': 'ben', 'age': 22},
]
li = filter(lambda dic: dic['age'] > 40, lst) #过滤掉列表里年龄没有超过40的字典
print(list(li))
# [{'id': 2, 'name': 'tom', 'age': 55}, {'id': 4, 'name': 'steve', 'age': 44}]
与map()一起用
lst1 = [1, 2, 3, 4, 5]
lst2 = [6, 7, 8, 9, 10]
print(list(map(lambda x, y: x + y, lst1, lst2))) #把两个列表索引相同的元素相加,组成一个新列表
#[7, 9, 11, 13, 15]
二. 递归函数
在函数中调用函数本身. 就是递归.
def f():
print('hello ,world')
f() #调用自身
f() #最多调用996层,然后报错
import sys
sys.setrecursionlimit(10000) # 可以调整递归深度. 但是不一定能跑到
递归的应用: 可以使用递归来遍历各种树形结构, 比如文件夹系统. 可以使用递归来遍历该文件夹中的所有文件.
# 遍历树形结构
import os
filePath = "d:\pycharm"
def read(filePath, n): #n的值可以用来对文件缩进
it = os.listdir(filePath) # 打开文件夹
for el in it:
# 拿到路径
fp = os.path.join(filePath, el) # 获取到绝对路径
if os.path.isdir(fp): # 判断是否是文件夹
print("\t"*n,el) #通过n的大小来对文件夹进行缩进
read(fp, n+1) # 又是文件夹. 继续读取内部的内容 递归入口
else:
print("\t"*n,el) # 递归出口 read(filePath, 0) #初始值为0,第一层文件夹不用缩进
三. 二分查找
二分查找. 每次能够排除掉一半的数据, 查找的效率非常高, 但是局限性比较大, 必须是有序列才可以使用而分查找
要求: 查找的序列必须是有序列.
# 判断n是否在lst中出现. 如果出现请返回n所在的位置
# 二分查找: 非递归算法
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
n = 567
left = 0
right = len(lst) - 1
count = 1
while left <= right: #当作表索引小于等于右边索引,可以继续比较
middle = (left + right) // 2 #中间索引
if n > lst[middle]: #若n大于中间值,则n的取值在右边部分,middle的索引需要向右移动一位
left = middle + 1
elif n < lst[middle]: #若n小于中间值,则n的取值在左边部分,middle的索引需要向左移动一位
right = middle - 1
else:
print(count) #比较的次数
print("存在")
print(middle)
break
count = count + 1
else:
print("不存在")
# 普通递归版本二分法
lst = [11,22,33,44,55,66,77,88,99,123,234,345,456,567,678,789,1111]
def binary_search(left, right, n): #左右两边索引,和判断的数字这三个参数
middle = (left + right)//2
if left > right: #比较结束后没有n的值,再进行比较时就会出现左索引大于右边索引,
return -1
if n > lst[middle]:
left = middle + 1
elif n < lst[middle]:
right = middle - 1
else:
return middle
return binary_search(left, right, n) #加return需要获得再次调用的返回值
print(binary_search(0, len(lst)-1, 65) )
lamda匿名函数(与sorted(),filter(),map() 一起用), 递归函数, 二分查找的更多相关文章
- 小学生都能学会的python(<lamda匿名函数,sorted(),filter(),map(),递归函数>)
小学生都能学会的python(<<lamda匿名函数,sorted(),filter(),map(),递归函数,二分法>> 1. lambda 匿名函数 lambda 参数: ...
- python 内置函数,匿名函数,sorted,filter,map,递归,二分法,冒泡算法 eval
############################总结#################################1. lambda 匿名函数 语法——lambda 参数:返回值 __na ...
- 匿名函数、sorted()、filter()、map()、递归
一.匿名函数 1.lambda 匿名函数 方法 lambda 参数:返回值 (函数名统一叫lambda) def func(n): return n**2 print(func(3)) #这是一个普通 ...
- 内置函数二(lambda函数,sorted(),filter(),map(),递归函数,二分法查找)
一,匿名函数 lambda表⽰示的是匿名函数. 不需要⽤用def来声明, ⼀一句句话就可以声明出⼀一个函数 语法: 函数名 = lambda 参数: 返回值 注意: 1. 函数的参数可以有多个. ...
- python之内置函数(lambda,sorted,filter,map),递归,二分法
一.lambda匿名函数 为了解决一些简单需求而设计的一句话函数,lambda表示的是匿名函数,不需要用def来声明,一句话就可以声明出一个函数. 语法: 函数名 = lambda 参数 : 返回值 ...
- 内置函数 lambda sorted filter map 递归
一 lambda 匿名函数 为了解决一些简单的需求而设计的一句话函数 # 计算 n 的 n次方 def func(n): return n**n print(func(10)) f = lambda ...
- Python【day 14-4】sorted filter map+递归文件夹+二分法查找
def func(x): #普通函数 return x*x ret1 = func(10) #匿名函数 f = lambda x:x*x # 匿名函数写法: 匿名函数名=lambda 参数:返回值 ' ...
- 内置函数之sorted,filter,map
# 4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb # name=['oldboy','alex','wusir'] # print(list(map(lambda i:i ...
- Python【day 14-5】sorted filter map函数应用和练习
'''''' ''' 内置函数或者和匿名函数结合输出 4,用map来处理字符串列表,把列表中所有人都变成sb,比方alex_sb name=[‘oldboy’,'alex','wusir'] 5,用m ...
随机推荐
- LG2634 [国家集训队]聪聪可可
题意 题目描述 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好了,可是 ...
- POJ2480 Longge's problem
题意 Language:Default Longge's problem Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1064 ...
- 你不知道的JavaScript(上卷) (Kyle Simpson 著)
第一部分 作用域和闭包 第1章 作用域是什么 (已看) 1.1 编译原理 1.2 理解作用域 1.2.1 演员表 1.2.2 对话 1.2.3 编译器有话说 1.2.4 引擎和作用域的对话 1.2.5 ...
- yum 安装 Mysql 5.7,忘记密码解决方案
Linux卸载yum安装的mysql 一.系统情况 Linux:Centos7.4(64位) Mysql:5.6 二.卸载mysql 1.查看安装了哪些mysql程序 Bash rpm -qa | g ...
- Git SVN Clone 旧项目迁移到 Git 上
Git SVN Clone 旧项目迁移到 Git 上 很久使用的是 SVN,但由于项目重启,想改为 Git. 之前的 SVN 仓库是本地,所以在 git svn clone 一直不成功. 正确的方式: ...
- openstack--7--创建一台虚拟机
回顾下前几节用到的东西 MySQL:为各个服务提供数据存储RabbitmQ:为各个服务之间提供通信提供交通枢纽Keystone:为各个服务之间通信提供认证和服务注册Glance:为虚拟机提供镜像管理N ...
- 我 支持 使用 async await
这篇文章原来的 标题 是 <我 反对 使用 async await>, 但经过后来的一些研究, 发现 async await 是 良性 的, 所以 我把 标题 改成了 <我 支持 使 ...
- css中权重与继承
出处:http://blog.csdn.net/xf616510229/article/details/53613212
- PyCharm 链接MySQL 数据库
1.View -> Tool Windows-Database; 2.添加数据源: 3.配置数据库的驱动信息: 4.设置驱动文件,勾选“Use Provided driver MySQL Con ...
- Docker 制作自己的镜像
1. 下载tomcat镜像 docker pull hub.c.163.com/library/tomcat:latest 2. 创建Dockfile vi Dockerfile from hub.c ...