map
和 reduce
是Python中用于对集合进行处理的内建函数。
map函数:
map
函数接受一个函数和一个可迭代对象作为参数,并将该函数应用于可迭代对象中的每个元素,返回一个新的可迭代对象(通常是一个迭代器)。
基本语法:
map(function, iterable)
function
:要应用于每个元素的函数。iterable
:一个可迭代对象,如列表、元组等。
示例:
def square(x):
return x ** 2
numbers = [1, 2, 3, 4, 5]
squared_numbers = map(square, numbers)
# squared_numbers 是一个迭代器,包含了 [1, 4, 9, 16, 25]
在上述示例中,map
将 square
函数应用于 numbers
列表中的每个元素,返回了一个包含了每个元素平方值的迭代器。
reduce函数:
reduce
函数接受一个函数和一个可迭代对象作为参数,将该函数应用于可迭代对象中的元素,从左到右依次累积计算,最终返回一个单一的值。
在Python 3中,reduce
函数被移到了 functools
模块中。
基本语法:
functools.reduce(function, iterable)
function
:用于计算的函数,它必须接受两个参数。iterable
:一个可迭代对象,如列表、元组等。
示例:
from functools import reduce
def add(x, y):
return x + y
numbers = [1, 2, 3, 4, 5]
result = reduce(add, numbers)
# result 等于 15 (1 + 2 + 3 + 4 + 5)
在上述示例中,reduce
将 add
函数应用于 numbers
列表中的所有元素,从左到右依次相加,最终得到结果 15。
需要注意的是,在Python 3中,reduce
函数被移到了 functools
模块中,因此需要从该模块中导入。
手写str2int()函数
>>> 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
整理成一个函数
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))
使用lambda函数进行简化
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 char2num(s):
return DIGITS[s]
def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))