二分法

算法:是高效解决问题的办法

算法之二分法

格式:

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——二分法面向过程匿名函数相关推荐

  1. Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python

    Python学习教程(Python学习路线_Python基础学习教程_Python视频教程):初学者新手怎样快速入门Python? 人生苦短,我用Python!!!短短几个字,现在在各大学习类平台随处 ...

  2. python是面向过程的吗_Python开发是面向过程、函数还是对象?

    Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象.正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的写法也是可 ...

  3. python是一种面向过程的编程语言_python是面向对象还是面向过程的

    详细内容 Python虽然是解释型语言,但从设计之初就已经是一门面向对象的语言,对于Python来说一切皆为对象.正因为如此,在Python中创建一个类和对象是很容易的,当然如果习惯面向过程或者函数的 ...

  4. 【 js基础 Day4】面向过程,面向对象,自定义对象,内置对象

    01 复习 函数:把一些重复的代码封装在一个地方,在需要的时候直接调用这个地方的代码就可以了 函数作用:代码重用 函数的参数: 1.形参:函数定义的时候,函数名字后面的小括号里的变量 2.实参:函数调 ...

  5. python面向什么编程_python基础-面向过程编程

    面向过程编程 面向过程编程其实是一种机械式的思维方式,其核心就是"过程". 过程指的是一种解决问题的步骤,即先干什么再干什么,最后干什么. 优点:将复杂的问题流程化,进而简单化. ...

  6. 在python中用递归的方法编程_python基础之函数,递归,内置函数

    阅读目录 一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量, ...

  7. python是一种面向过程的编程语言_python协成与面向过程编程

    import os import functools def init(func): @functools.wraps(func) #让warpper的帮助信息同eater相同 def warpper ...

  8. python莫比乌斯环_python基础|函数

    1 函数 在python中的函数,内置函数有很多,如:int(), str(), list(), dict(), set() 等内置整形函数,bool()内置布尔值函数,len()内置长度计算函数 , ...

  9. python登录面向对象_python基础之面向对象

    面向对象编程 面向过程编程:根据业务逻辑从上到下写代码,主要突出在流程上 函数式编程:将某些功能封装在函数里,日后不用重复编写,仅调用函数即可 面向对象编程:对函数进行分类和封装,让开发"更 ...

最新文章

  1. 记一次zabbix启动不成功
  2. k8s,nginx备份日志脚本
  3. boost::math模块计算因子和二项式系数的测试程序
  4. Gym102832K. Ragdoll(CCPC长春)
  5. xtragrid 某个值 查找_二分查找(下):如何快速定位IP对应的省份地址?
  6. 比较jquery中的after(),append(),appendTo()方法
  7. php 7 xhprof,php7中使用xhprof解析
  8. 数字电平(一):TTL和CMOS
  9. 怎样使用PDF编辑器删除多余页面
  10. 技术笔记:.Net全套就业班视频教程——数据库
  11. 5WHY分析法 学习笔记
  12. 无心剑英译秦观《鹊桥仙》
  13. word的大表格中自动换页
  14. python基础——matplotlib——scatter和plot方法中的maker参数(点的样式)
  15. 三种查看MySQL数据库版本的方法
  16. 调出任务管理器的快捷方式
  17. Electron_基础篇
  18. 个人任务管理系统总结
  19. linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一
  20. ctfshow-月饼杯WP

热门文章

  1. linux 添加路由_linux网络知识:路由策略(ip rule,ip route)
  2. Android开发之通过ImageView名称从文件夹拿到ImageView的Drawable对象的方法
  3. 学校拥有计算机清单和所放位置说明,大学计算机基础期末考试指南(2011)
  4. MailCore2 SDK API
  5. 图像处理——图像变换
  6. 区块链来了|网贷业想尝鲜,全民记账让卷款跑路成为不可能!
  7. 2.平凡之路-初识MyBatis
  8. 教你怎么屏蔽掉在移动端的宽带运营商的流量劫持,屏蔽无耻的广告
  9. Mac OS X安装Lua
  10. Matlab命令集--常用字符串函数