1. 程式人生 > >Python map()-reduce() 把字串轉換成浮點數

Python map()-reduce() 把字串轉換成浮點數

宣告:
我寫此文的目的是幫助和我一樣在廖雪峰老師官網上學習Python3的同學更好的理解和學習Python的知識,所以本博文及後續文章會跟著我的學習進度來走,主要內容是廖雪峰老師官網Python資料中每節知識點後的複習題的答案和解析,有一些是我自己原創的,有一些是網上整理的大神寫的簡潔但對新手並不是很明瞭的答案,我會盡可能的給出我的解析。

題目: 利用 map 和 reduce 編寫一個 str2float 函式 , 把 字串 ‘123.456’ 轉換成浮點數’123.456’

答案:

from functools import reduce
def str2float(s):
    def
fn(x,y):
return x*10+y n=s.index('.') s1=list(map(int,[x for x in s[:n]])) s2=list(map(int,[x for x in s[n+1:]])) return reduce(fn,s1) + reduce(fn,s2)/10**len(s2) print('\'123.4567\'=',str2float('123.4567'))

解析:
這個答案非原創,也是某位前輩寫的。
1行,從 functools 包裡呼叫 reduce
3-4行,定義一個 fn() 函式,用來把S1,S2這兩個list裡面的元素變成一個數。
5行,很關鍵的一步,利用 index() 函式確定字串 S 中 ‘.’的位置。
6-7行,先利用切片把我們傳入的 str 分成以前以後兩個部分(其實就是根據小數點分成整數和浮點數,分別處理),然後再把切割好的 str 利用 int 變成整數,map() 函式負責把 int 作用到擷取的 str 的每個元素中去。
8行,就說一個知識點,其他的都很好理解,m**n 這個表達的就是 m 的 n 次方。