摘要:我們用函數(shù)對(duì)序列求最值的想法建立在冒泡排序的算法上。在此基礎(chǔ)上,我們?cè)俅卫妹芭菖判虻乃惴ǎ瑢?duì)整個(gè)列表進(jìn)行排序。
??在一般將Python的reduce函數(shù)的例子中,通常都是拿列表求和來(lái)作為例子。那么,是否還有其他例子呢?
??本次分享將講述如何利用Python中的reduce函數(shù)對(duì)序列求最值以及排序。
??我們用reduce函數(shù)對(duì)序列求最值的想法建立在冒泡排序的算法上。先上例子?
from functools import reduce from random import randint A = [randint(1, 100) for _ in range(10)] print("The origin list A is %s"%A) f = lambda x,y: x if x>y else y print("max of list A is %s."%reduce(f,A)) print(reduce(f, A) == max(A))
在上述代碼中,列表A是一個(gè)含有10個(gè)元素的列表,里面的元素是1到100內(nèi)的隨機(jī)整數(shù)。f是lambda函數(shù),用于求兩個(gè)數(shù)的最大值。根據(jù)reduce函數(shù)的運(yùn)行原理,reduce(f, A)先會(huì)求出A中第一個(gè)和第二個(gè)元素的最大值,然后將這個(gè)最大值與第三個(gè)元素比較,返回兩者中的最大值,這個(gè)最大值也是前三個(gè)元素的最大值,以此類(lèi)推,我們最后得到的結(jié)果reduce(f, A)就是整個(gè)列表A中的最大值。
??將上述代碼中的lambda函數(shù)中的>號(hào)改為<號(hào)就能求得A的最小值。
??在此基礎(chǔ)上,我們?cè)俅卫妹芭菖判虻乃惴ǎ瑢?duì)整個(gè)列表進(jìn)行排序。具體的算法是:先用reduce函數(shù)求出整個(gè)列表的最大值,再用reduce函數(shù)求出整個(gè)列表去掉該最大值后的剩下元素中的最大值,以此類(lèi)推,就能對(duì)整個(gè)列表進(jìn)行排序了。代碼如下:
from functools import reduce from random import randint A = [randint(1, 100) for _ in range(10)] print("The origin list A is %s"%A) B = [] while(A): t = reduce(lambda x,y: x if x>y else y, A) B.append(t) A.remove(t) print("The sorted list is %s"%B)
輸出結(jié)果如下:
The origin list A is [27, 64, 81, 14, 18, 16, 66, 24, 43, 91]
The sorted list is [91, 81, 66, 64, 43, 27, 24, 18, 16, 14]
??本次分享到此結(jié)束,歡迎大家交流~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41619.html
摘要:高階函數(shù)實(shí)參是一個(gè)函數(shù)名函數(shù)的返回值是一個(gè)函數(shù)傳遞的參數(shù)包含函數(shù)名。內(nèi)置高階函數(shù)函數(shù)函數(shù)接收兩個(gè)參數(shù)一個(gè)是函數(shù)一個(gè)是序列將傳入的函數(shù)依次作用到序列的每個(gè)元素并把結(jié)果作為新的返回。 高階函數(shù) 實(shí)參是一個(gè)函數(shù)名 函數(shù)的返回值是一個(gè)函數(shù) print(abs(-10)) f = abs print(f(-10)) #傳遞的參數(shù)包含函數(shù)名。 def myfun(x,y,fun): ...
摘要:專(zhuān)題系列第八篇,講解多種方式求數(shù)組的最大值和最小值前言取出數(shù)組中的最大值或者最小值是開(kāi)發(fā)中常見(jiàn)的需求,但你能想出幾種方法來(lái)實(shí)現(xiàn)這個(gè)需求呢提供了函數(shù)返回一組數(shù)中的最大值,用法是值得注意的是如果有任一參數(shù)不能被轉(zhuǎn)換為數(shù)值,則結(jié)果為。 JavaScritpt 專(zhuān)題系列第八篇,講解多種方式求數(shù)組的最大值和最小值 前言 取出數(shù)組中的最大值或者最小值是開(kāi)發(fā)中常見(jiàn)的需求,但你能想出幾種方法來(lái)實(shí)現(xiàn)這個(gè)...
摘要:當(dāng)?shù)竭_(dá)時(shí)等同于直接插入排序,此時(shí)序列已基本有序,所有記錄在統(tǒng)一組內(nèi)排好成有序序列。當(dāng)面對(duì)大量數(shù)據(jù)時(shí),希爾排序?qū)⒈戎苯硬迦肱判蚋邇?yōu)勢(shì)圖示講解第一趟取增量,所有間隔為的元素分在一組,在各個(gè)組中分別進(jìn)行直接插入排序。 ...
摘要:會(huì)依次將中的數(shù)據(jù)傳遞到中,根據(jù)返回的或者,留下或者拋棄這個(gè)值。而對(duì)于字符串,則是根據(jù)字符串對(duì)應(yīng)的碼表進(jìn)行排序。同時(shí)也是一個(gè)高階函數(shù),可以實(shí)現(xiàn)自定義的排序方式。 map/reduce是一種編程思想,在各個(gè)領(lǐng)域都有它的實(shí)踐。網(wǎng)上有一個(gè)簡(jiǎn)單的例子解釋map/reduce。比如說(shuō)你需要數(shù)一下某一個(gè)圖書(shū)館中有多少本藏書(shū)。最傻瓜的做法就是排一個(gè)人從頭數(shù)到尾。這樣速度慢,低效。另一種方法就是先將圖書(shū)...
摘要:作為高階函數(shù),事實(shí)上它把運(yùn)算規(guī)則抽象了,因此,我們不但可以計(jì)算簡(jiǎn)單的,還可以計(jì)算任意復(fù)雜的函數(shù),比如,把這個(gè)所有數(shù)字轉(zhuǎn)為字符串只需要一行代碼。 Python 學(xué)習(xí) 函數(shù)式編程 高階函數(shù) Higher-order function 變量可以指向函數(shù) 以Python內(nèi)置的求絕對(duì)值的函數(shù)abs()為例 >>> f >>> f(-10) 10 函數(shù)名也是變量 >>> abs = 10 >>>...
閱讀 2653·2019-08-30 15:52
閱讀 3600·2019-08-29 17:02
閱讀 1847·2019-08-29 13:00
閱讀 926·2019-08-29 11:07
閱讀 3241·2019-08-27 10:53
閱讀 1772·2019-08-26 13:43
閱讀 1018·2019-08-26 10:22
閱讀 1342·2019-08-23 18:06