Python之利用reduce函數(shù)求序列的最值及排序

??在一般將Python的reduce函數(shù)的例子中,通常都是拿列表求和來作為例子。那么,是否還有其他例子呢?
??本次分享將講述如何利用Python中的reduce函數(shù)對序列求最值以及排序。
??我們用reduce函數(shù)對序列求最值的想法建立在冒泡排序的算法上。先上例子?

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是一個含有10個元素的列表,里面的元素是1到100內(nèi)的隨機整數(shù)。f是lambda函數(shù),用于求兩個數(shù)的最大值。根據(jù)reduce函數(shù)的運行原理,reduce(f, A)先會求出A中第一個和第二個元素的最大值,然后將這個最大值與第三個元素比較,返回兩者中的最大值,這個最大值也是前三個元素的最大值,以此類推,我們最后得到的結(jié)果reduce(f, A)就是整個列表A中的最大值。
??將上述代碼中的lambda函數(shù)中的>號改為<號就能求得A的最小值。
??在此基礎(chǔ)上,我們再次利用冒泡排序的算法,對整個列表進行排序。具體的算法是:先用reduce函數(shù)求出整個列表的最大值,再用reduce函數(shù)求出整個列表去掉該最大值后的剩下元素中的最大值,以此類推,就能對整個列表進行排序了。代碼如下:

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)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容