前言:学习了python中的map与reduce函数后,对于应用觉得稍欠一些,于是实现了一个用字符串转化为整形的函数比如"12345"转化为12345
关于map与reduce不再作详细解释,可自己上网查阅,废话不多说直接讲步骤:
首先我们通过map函数将字符串中所涵盖的数字一个一个拆分并放在list中:
def char2um(s):
digits = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
return digits[s]
只需要map(char2um,目标字符串)即可
其次,我们需要将list中的所有个位数进行某种运算转换成我们想要的,比如[1,2,3,4,5]需要转换为12345,这里就用到了reduce,12345可以将其与[1,2,3,4,5]的关系联系起来,(((1*10+2)*10+3)*10+4)*10+5,可以看出这个运算规律是list的前一项乘以10然后加后一项并且作为新的前一项去继续乘以10再加再往后的一项完成的(有些拗口)但如果明白以后,发现这种特性不正好能用reduce来实现吗。先定义reduce所调用的函数(前一项乘以10并加后一项):
def fn(x, y):
return x * 10 + y
实现示例:
reduce(fn, map(char2num, '13579')
完整代码:
from functools import reduce
DIGITS = {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}
def str2int(s):
def fn(x, y):
return x * 10 + y
def char2num(s):
return DIGITS[s]
return reduce(fn, map(char2num, s))