標籤:

Python利用嵌套函數二分搜索列表中大於等於m,小於等於n的數字

題目是用二分搜索找出列表numbers中大於等於m,小於等於n的數字

這個問題是貼吧上一個同學提出的問題

寫了一個程序,運行不了,求高手..【python吧】_百度貼吧

看他的代碼,發現沒有將問題分解。這個問題,是要將問題分解為先設置一個二分法函數,再利用這個二分法來找range(m,n)之間的數。

剛好,嵌套函數可以解決這樣的問題

# coding:utf-8n"""n黃哥python遠程視頻培訓班 所寫n諮詢:qq:1465376564 nhttps://github.com/pythonpeixun/article/blob/master/index.mdn"""nndef searchseg(m,n,lst):n 傳參數的時候,需要傳有序的listn out_lst = []n def binary_search(lst,key):n low = 0n high = len(lst) - 1n while high >= low:n mid = (low + high) / 2n if key < lst[mid]:n high = mid -1n elif key == lst[mid]:n return midn else:n low = mid +1n return -1n n for i in range(m,n):n if binary_search(lst,i) >=0 and i in lst:n out_lst.append(i)n return out_lstnnlst = [3,6,9,10,12,23,56,88]nprint(searchseg(7,16,lst))nn#[9, 10, 12]n

在貼吧上提問者將問題搞太複雜,用一句話可以搞定(非二分法)、請看下面代碼

# coding:utf-8n"""n黃哥python培訓 所寫n諮詢:qq:1465376564 n黃哥python遠程視頻培訓班nhttps://github.com/pythonpeixun/article/blob/master/index.mdn"""nndef fina_all(m,n,lst):n """n >>> fina_all(5,8,[3,6,7,10,12])n [6, 7]n >>> fina_all(5,8,[3,2,6,8,12,55])n [6, 8]n >>> fina_all(0,2,[3,2,6,8,12,55])n [2]n """n return [i for i in lst if n >= i >= m]nnnif __name__ == __main__:n import doctestn doctest.testmod(verbose=True)n

如何訓練自己的編程思路 - 知乎專欄
推薦閱讀:

Python GUI教程(九):從UI文件中解耦Python代碼
黃哥教Python初學者如何調試錯誤。
計算機視覺 | Python OpenCV 3 使用背景減除進行目標檢測

TAG:Python |