目錄演算法:是高效解決問題的辦法
演算法之二分法
需求:有乙個按照從小到大順序排列的數字列表需要從該數字列表中找到我們想要的那個乙個數字如何做更高效???
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)
二分法
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、即便是乙個軟體需要頻繁更迭,也不並不代表這個軟體所有的組成部分都需要一起更迭
lambda
對比使用def關鍵字建立的是有名字的函式,使用lambda關鍵字建立則是沒有名字的函式,即匿名函式,語法如下
lambda 引數1,引數2,...: expression
舉例# 1、定義
lambda x,y,z:x+y+z
#等同於
def func(x,y,z):
return x+y+z
# 2、呼叫
# 方式一:
res=(lambda x,y,z:x+y+z)(1,2,3)
# 方式二:
func=lambda x,y,z:x+y+z # 「匿名」的本質就是要沒有名字,所以此處為匿名函式指定名字是沒有意義的
res=func(1,2,3)
map
filter
reduce
函式map、reduce、filter都支援迭代器協議,用來處理可迭代物件,我們以乙個可迭代物件array為例來介紹它們三個的用法
array=[1,2,3,4,5]
要求一:對array的每個元素做平方處理,可以使用map函式
map函式可以接收兩個引數,乙個是函式,另外乙個是可迭代物件,具體用法如下
>>> res=map(lambda x:x**2,array)
>>> res
>>>
解析:map會依次迭代array,得到的值依次傳給匿名函式(也可以是有名函式),而map函式得到的結果仍然是迭代器。
>>> list(res) #使用list可以依次迭代res,取得的值作為列表元素
[1, 4, 9, 16, 25]
要求二:對array進行合併操作,比如求和運算,這就用到了reduce函式
reduce函式可以接收三個引數,乙個是函式,第二個是可迭代物件,第三個是初始值
# reduce在python2中是內建函式,在python3中則被整合到模組functools中,需要匯入才能使用
>>> from functools import reduce
>>> res=reduce(lambda x,y:x+y,array)
>>> res
15
程式設計正規化 面向過程與函式式
一 面向過程 基於面向過程開發程式就好比在設計一條流水線,若程式一開始是要著手解決乙個大的問題,按照過程式的思路就是把這個大的問題分解成很多個小問題或子過程去實現,然後依次呼叫即可,這極大地降低了程式的複雜度。舉例如下 寫乙個資料遠端備份程式,分三步 本地資料打包,上傳至雲伺服器,檢測備份檔案可用性...
面向過程程式設計,函式式程式設計
面向過程程式設計,函式式程式設計 峰哥原創面向過程解釋 函式的引數傳入,是函式吃進去的食物,而函式return的返回值,是函式拉出來的結果,面向過程的思路就是,把程式的執行當做一串首尾相連的函式,乙個函式吃,拉出的東西給另外乙個函式吃,另外乙個函式吃了再繼續拉給下乙個函式吃。面向過程 機械式思維,流...
物件導向與面向過程
分析出解決問題所需要的步驟,然後用函式把步驟分解開,使用時再呼叫這些函式。面向過程強調流程化 線性化 步驟化的思考方式 把構成問題事務分解成各個物件,描述各個事務在問題中的行為。強調整體性和差異性。具有抽象 封裝,繼承,多型 面向過程效率高 流程明確,具體步驟清楚 但耗費精力,重用率低 擴充套件能力...