日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python二分法编程_python基础18——二分法面向过程匿名函数

發布時間:2023/12/15 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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——二分法面向过程匿名函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。