Python 入門之經典函式例項之Map-Reduce - 對映與歸約的思想
任務描述
Python 中有兩個非常常見的內建函式:map()和reduce()函式。這兩個函式都是應用於序列的處理函式,map()用於對映,reduce()用於歸併。本關目標就是讓學習者瞭解並掌握map()和reduce()函式的相關知識。
相關知識
map()函式會根據傳入的函式對指定的序列做對映。map()函式接收兩個引數,一個是function函式,另一個引數是一個或多個序列。map()函式會將傳入的函式依次作用到傳入序列的每個元素,並把結果作為新的序列返回。map()函式的定義為:
map(function, sequence[, sequence, …]) -> list
例如,我們要對一個列表序列中的每個數值元素進行平方運算,結合上一關提到的lambda函式的例子,程式程式碼如下:
r = map(lambda x: x ** 2, [1, 2, 3, 4,])
print(list(r))
輸出結果:
[1, 4, 9, 16]
當map()函式的第二個引數中存在多個序列時,會依次將每個序列中相同位置的元素一起做引數並呼叫function函式。例如,要對map()函式傳入的兩個序列中的元素依次求和,程式程式碼如下:
r = map(lambda x, y: x + y, [1, 2, 3, 4, 5], [6, 7, 8, 9, 10])
print(list(r))
輸出結果:
[7, 9, 11, 13, 15]
當map()函式傳入的序列有多個時,我們要注意function函式的引數數量,應和map()函式傳入的序列數量相匹配。
reduce()函式把傳入的函式作用在一個序列[x1, x2, x3, …]上,且這個函式必須要接收兩個引數。reduce()函式把第一次計算的結果繼續和序列中的下一個元素做累積計算。reduce()函式的定義為:
reduce(function, sequence[, initial]) -> value
function引數是有兩個引數的函式,reduce()函式依次在序列中取元素,並和上一次呼叫function函式的結果做引數,然後再次呼叫function函式。例如:
from functools import reduce
r = reduce(lambda x, y: x + y, [1, 2, 3, 4, 5],6)
print(r)
輸出結果:
21
在上述例子中,程式的計算順序為((((((1+6)+2)+3)+4)+5))。
小結
map()和reduce()函式的應用十分廣泛,在分散式計算領域有著十分重要的運用。我們期待著學習者在今後的開發道路上對map()和reduce()函式有更加深刻的體驗。
程式設計要求
本關的程式設計任務是補全src/step3/map-reduce.py檔案的程式碼,實現相應的功能。具體要求如下:
將輸入的一個正整數分解質因數,並將結果輸出。例如:輸入90,列印出90=2335。
本關涉及的程式碼檔案src/step3/map-reduce.py的程式碼框架如下:
# coding=utf-8
# 輸入一個正整數
x = int(input())
# 請在此新增程式碼,將輸入的一個正整數分解質因數
########## Begin ##########
########## End ##########
# 輸出結果,利用map()函式將結果按照規定格式輸出
print(x,'=','*'.join(map(str,result)))
測試說明
本關的測試檔案是src/step3/map-reduce.py,測試過程如下:
平臺自動編譯生成map-reduce.exe;
平臺執行map-reduce.exe,並以標準輸入方式提供測試輸入;
平臺獲取map-reduce.exe輸出,並將其輸出與預期輸出對比。如果一致則測試通過,否則測試失敗。
以下是平臺對src/step3/map-reduce.py的樣例測試集:
測試輸入:
80
預期輸出:
80 = 22225
測試輸入:
79
預期輸出:
79 = 79
測試輸入:
225
預期輸出:
225 = 335*5
測試輸入:
123456
預期輸出:
123456 = 2222223*643
參考答案
# coding=utf-8
# 輸入一個正整數
x = int(input())
# 請在此新增程式碼,將輸入的一個正整數分解質因數
########## Begin ##########
def isPrime(n):
flag = True
for i in range(2,n):
if n % i == 0:
flag = False
else:
flag = True
return flag
def PrimeFator(n):
ls = []
while n != 1:
for i in range(2,n+1):
if isPrime(i) and n % i == 0:
ls.append(i)
n = int(n/i)
break
return ls
result = PrimeFator(x)
########## End ##########
# 輸出結果,利用map()函式將結果按照規定字串格式輸出
print(x,'=','*'.join(map(str,result)))
相關文章
- Python 入門之經典函式例項(二)Python函式
- Python入門之函式呼叫(二)Python函式
- jquery經典例項之回到頂部jQuery
- Python函式每日一講 - frozenset集合函式入門及例項Python函式
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- PHP入門之函式PHP函式
- 函式與極限 第一節 對映與函式函式
- Python入門經典案例一Python
- Cache與主存之間的直接對映,全相聯對映和組項聯對映以及其地址變換
- Python入門-函式Python函式
- 前端建構函式、原型、例項物件之間的關係前端函式原型物件
- python例項建立銷燬的函式整理Python函式
- 新手學python之Python的輸入輸出函式Python函式
- [轉載] Python 機器學習經典例項Python機器學習
- Hibernate基於Maven入門例項,與MyBatis比對MavenMyBatis
- go語言入門之-函式和方法Go函式
- Python——astroplan庫入門例項(二)PythonAST
- Python 3 學習筆記之類與例項Python筆記
- Python合集之Python函式Python函式
- DL4J實戰之四:經典卷積例項(GPU版本)卷積GPU
- python入門:range函式Python函式
- ES6入門之函式的擴充套件函式套件
- Python中compile函式的語法及例項!PythonCompile函式
- Python之函式5.1Python函式
- CSS 例項之開啟大門CSS
- 歸併排序的經典-求逆序對排序
- Mybatis入門篇之結果對映,你射準了嗎?MyBatis
- python入門必會的助手函式:dir()函式Python函式
- 集合與函式入門函式
- CSS 例項之文字的凸起與凹陷CSS
- Python入門基礎知識例項,Python
- Python基礎入門(5)- 函式的定義與使用Python函式
- LeetCode入門指南 之 動態規劃思想LeetCode動態規劃
- 《MySQL 入門教程》第 14 篇 MySQL 常用函式之數學函式MySql函式
- python-函式入門(一)Python函式
- 嵌入式開發 ARM入門經典
- Python學習之函式Python函式
- python---之sorted函式Python函式