Python學習筆記(6) -- 字元轉數字、字串轉整型(char2num、str2int)
阿新 • • 發佈:2019-02-01
原文連結:
http://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014317852443934a86aa5bb5ea47fbbd5f35282b331335000
但是如果要把序列[1, 3, 5, 7, 9]
變換成整數13579
,reduce
就可以派上用場:
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...
>>> reduce(fn, [1 , 3, 5, 7, 9])
13579
這個例子本身沒多大用處,但是,如果考慮到字串str
也是一個序列,對上面的例子稍加改動,配合map()
,我們就可以寫出把str
轉換為int
的函式:
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...
>>> def char2num(s):
... return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7 , '8': 8, '9': 9}[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579
整理成一個str2int
的函式就是:
from functools import reduce
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9 }[s]
return reduce(fn, map(char2num, s))
還可以用lambda函式進一步簡化成:
from functools import reduce
def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))