python高阶函数用法之map reduce

map()函数

接收两个参数,一个是函数,一个是Iterablemap将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。

>>> def f(x):
...     return x * x
...
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r)
[1, 4, 9, 16, 25, 36, 49, 64, 81]

>>> list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
['1', '2', '3', '4', '5', '6', '7', '8', '9']

map()函数能够简化编程

reduce()函数

>>> from functools import reduce
>>> def add(x, y):
...     return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

>>> from functools import reduce
>>> def fn(x, y):
...     return x * 10 + y
...
>>> def char2num(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]
...
>>> reduce(fn, map(char2num, '13579'))
13579

reduce()函数

reduce (func, seq[, init()])
reduce()函数是重复迭代函数,它的执行过程为:每一次迭代,都将上一次的迭代结果与序列中的下个数值作为函数的输入

init是可选的,如果指定,则作为第一次迭代使用,如果没有指定,就取seq中的第一个元素。

利用mapreduce编写一个str2float函数,把字符串'123.456'转换成浮点数123.456

from functools import reduce

def str2float(s):
    loc = s.find('.')
    s1 = s.replace('.','')
    num = reduce(fn, map(char2num, s1))
    for n in range(len(s)-loc-1):
        num = num/10.0
    return num
def char2num(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]
def fn(x, y):
    return x * 10 + y

参考来源:https://www.liaoxuefeng.com/wiki/1016959663602400/1017329367486080

猜你喜欢

转载自blog.csdn.net/li4692625/article/details/109482766