python二分法编程_python基础18——二分法面向过程匿名函数
二分法
算法:是高效解决问题的办法
算法之二分法
格式:
def binary_search(ls, num, lower=0, high=None):
if high is None:
high = len(ls) - 1
mid = (lower + high) // 2
if mid == 0 and num != ls[0]:
return "不存在"
if mid == len(ls) - 1 and num != ls[-1]:
return "不存在"
if num == ls[mid]:
return mid, ls[mid]
elif num < ls[mid]:
return binary_search(ls, num, lower, mid)
else:
return binary_search(ls, num, mid + 1, high)
需求:有一个按照从小到大顺序排列的数字列表
需要从该数字列表中找到我们想要的那个一个数字
如何做更高效???
nums=[-3,4,7,10,13,21,43,77,89]
find_num=10
nums=[-3,4,13,10,-2,7,89]
nums.sort() #升序
print(nums)
方案一:整体遍历效率太低
for num in nums:
if num == find_num:
print('find it')
break
方案二:二分法
def binary_search(find_num,列表):
mid_val=找列表中间的值
if find_num > mid_val:
# 接下来的查找应该是在列表的右半部分
# 列表=列表切片右半部分
binary_search(find_num,列表)
elif find_num < mid_val:
# 接下来的查找应该是在列表的左半部分
# 列表=列表切片左半部分
binary_search(find_num,列表)
else:
print('find it')
nums=[-3,4,7,10,13,21,43,77,89]
find_num=8
def binary_search(find_num,l):
print(l)
if len(l) == 0:
print('找的值不存在')
return
mid_index=len(l) // 2
if find_num > l[mid_index]:
# 接下来的查找应该是在列表的右半部分
l=l[mid_index+1:]
binary_search(find_num,l)
elif find_num < l[mid_index]:
# 接下来的查找应该是在列表的左半部分
l=l[:mid_index]
binary_search(find_num,l)
else:
print('find it')
binary_search(find_num,nums)
面向过程稿编程思想
# 编程思想/范式
面向过程的编程思想:
核心是"过程"二字,过程即流程,指的是做事的步骤:先什么、再什么、后干什么
基于该思想编写程序就好比在设计一条流水线
优点:复杂的问题流程化、进而简单化
缺点:扩展性非常差
面向过程的编程思想应用场景解析:
1、不是所有的软件都需要频繁更迭:比如编写脚本
2、即便是一个软件需要频繁更迭,也不并不代表这个软件所有的组成部分都需要一起更迭
匿名函数
1、def用于定义有名函数
func=函数的内存地址
def func(x,y):
return x+y
print(func)
2、lamdab用于定义匿名函数
print(lambda x,y:x+y)
3、调用匿名函数
方式一:
res=(lambda x,y:x+y)(1,2)
print(res)
方式二:
func=lambda x,y:x+y
res=func(1,2)
print(res)
4、匿名用于临时调用一次的场景:更多的是将匿名与其他函数配合使用
# 应用
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
需求1:找出薪资最高的那个人=》lili
res=max([3,200,11,300,399])
print(res)
res=max(salaries)
print(res)
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
# 迭代出的内容 比较的值
'siry' 3000
'tom' 7000
'lili' 10000
'jack' 2000
def func(k):
return salaries[k]
========================max的应用
res=max(salaries,key=func) # 返回值=func('siry')
print(res)
res=max(salaries,key=lambda k:salaries[k])
print(res)
========================min的应用
res=min(salaries,key=lambda k:salaries[k])
print(res)
========================sorted排序
salaries={
'siry':3000,
'tom':7000,
'lili':10000,
'jack':2000
}
res=sorted(salaries,key=lambda k:salaries[k],reverse=True)
print(res)
========================map的应用(了解):对array的每个元素做平方处理
l=['alex','lxx','wxx','薛贤妻']
new_l=(name+'_dsb' for name in l)
print(new_l)
res=map(lambda name:name+'_dsb',l)
print(res) # 生成器
========================filter的应用(了解): 对array进行过滤操作
l=['alex_sb','lxx_sb','wxx','薛贤妻']
res=(name for name in l if name.endswith('sb'))
print(res)
res=filter(lambda name:name.endswith('sb'),l)
print(res)
========================reduce的应用(了解):对array进行合并操作,比如求和运算
from functools import reduce
res=reduce(lambda x,y:x+y,[1,2,3],10) # 16
print(res)
res=reduce(lambda x,y:x+y,['a','b','c']) # 'a','b'
print(res)
python二分法编程_python基础18——二分法面向过程匿名函数相关推荐
- Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python
Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...
- python是面向过程的吗_Python开发是面向过程、函数还是对象?
Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象.正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写法也是可 ...
- python是一种面向过程的编程语言_python是面向对象还是面向过程的
详细内容 Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象.正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的 ...
- 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象
01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...
- python面向什么编程_python基础-面向过程编程
面向过程编程 面向过程编程其实是一种机械式的思维方式,其核心就是"过程". 过程指的是一种解决问题的步骤,即先干什么再干什么,最后干什么. 优点:将复杂的问题流程化,进而简单化. ...
- 在python中用递归的方法编程_python基础之函数,递归,内置函数
阅读目录 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量, ...
- python是一种面向过程的编程语言_python协成与面向过程编程
import os import functools def init(func): @functools.wraps(func) #让warpper的帮助信息同eater相同 def warpper ...
- python莫比乌斯环_python基础|函数
1 函数 在python中的函数,内置函数有很多,如:int(), str(), list(), dict(), set() 等内置整形函数,bool()内置布尔值函数,len()内置长度计算函数 , ...
- python登录面向对象_python基础之面向对象
面向对象编程 面向过程编程:根据业务逻辑从上到下写代码,主要突出在流程上 函数式编程:将某些功能封装在函数里,日后不用重复编写,仅调用函数即可 面向对象编程:对函数进行分类和封装,让开发"更 ...
最新文章
- 记一次zabbix启动不成功
- k8s,nginx备份日志脚本
- boost::math模块计算因子和二项式系数的测试程序
- Gym102832K. Ragdoll(CCPC长春)
- xtragrid 某个值 查找_二分查找(下):如何快速定位IP对应的省份地址?
- 比较jquery中的after(),append(),appendTo()方法
- php 7 xhprof,php7中使用xhprof解析
- 数字电平(一):TTL和CMOS
- 怎样使用PDF编辑器删除多余页面
- 技术笔记:.Net全套就业班视频教程——数据库
- 5WHY分析法 学习笔记
- 无心剑英译秦观《鹊桥仙》
- word的大表格中自动换页
- python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)
- 三种查看MySQL数据库版本的方法
- 调出任务管理器的快捷方式
- Electron_基础篇
- 个人任务管理系统总结
- linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一
- ctfshow-月饼杯WP
热门文章
- linux 添加路由_linux网络知识:路由策略(ip rule,ip route)
- Android开发之通过ImageView名称从文件夹拿到ImageView的Drawable对象的方法
- 学校拥有计算机清单和所放位置说明,大学计算机基础期末考试指南(2011)
- MailCore2 SDK API
- 图像处理——图像变换
- 区块链来了|网贷业想尝鲜,全民记账让卷款跑路成为不可能!
- 2.平凡之路-初识MyBatis
- 教你怎么屏蔽掉在移动端的宽带运营商的流量劫持,屏蔽无耻的广告
- Mac OS X安装Lua
- Matlab命令集--常用字符串函数