python函数reduce()和map()的区别--小记

map

map函数的定义
map(function_to_apply, list_of_inputs)
  • function_to_apply:代表函数
  • list_of_inputs:代表输入序列

map是把列表中所有元素一个个地传递给一个函数,并输出一个包含所有结果的列表。

注意:python3中 map函数返回的是迭代器

image

比方说:
items = [1, 2, 3, 4, 5] # 列表
squared = []
for i in items:
    squared.append(i**2)

map函数可以让我们用一种简单而漂亮得多的方式来实现:

items = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, items))

上面使用了匿名函数,也可以自定义函数:

items = [1, 2, 3, 4, 5]
def f(x):
    return x**2
squared = list(map(f, items))

reduce

reduce函数的定义

reduce(function, iterable[, initializer]) 
  • function:代表函数
  • iterable:序列
  • initializer:初始值(可选)

reduce是把列表中的前两个数做运算,再把结果与第三个数做运算...直到最后输出一个值

与map不同,reduce不可以直接使用,需要用from functools import reduce导入

image

比如说

要求n的阶乘,就可以用reduce做:

# 导入reduce
from functools import reduce 
# 定义函数
def f(x,y):
    return x*y
# 定义序列,含1~n的元素
items = range(1,n+1)
# 使用reduce方法
result = reduce(f,items)
print(result)

比如:

题目:求1+2!+3!+...+20!的和。
#
# reduce()和map()的区别
# 前者是返回一个值,后者返回一个列表(py3是一个迭代器)

# 方法一:
from functools import reduce
# 定义阶乘函数
def mul(n):
    msum=1
    for i in range(1,n+1):
        msum=msum*i
    return msum
sn=[]
# 遍历放进列表
for i in range(1,21):
    sn.append(mul(i))
s1=sum(sn)
print('方法一:')
print('1! + 2! + 3! + ... + 20! =',s1)



# 方法二:
s2 = 0
t = 1
for n in range(1,21):
    t *= n   # 前一个t乘以当前数 从1开始   即是实现阶乘
    s2 += t   # 实现阶乘数的相加
print('方法二:')
print ('1! + 2! + 3! + ... + 20! = %d' % s2)


# 方法三:使用sum和map函数
# sum() 对参数列表实现累加
# map() 对参数列表(第二个参数)实现遍历函数(第一个参数)
s3 = sum(map(mul,range(1,21)))
print('方法三:')
print ('1! + 2! + 3! + ... + 20! = %d' % s3)


# 方法四:
# reduce()
s4=0
for i in range(1,21):
    s4 += reduce(lambda a,b:a*b,range(1,i+1)) # 实现每一个i的阶乘,然后累加到s4
print('方法四:')
print ('1! + 2! + 3! + ... + 20! = %d' % s4)
结果为:
方法一:
1! + 2! + 3! + ... + 20! = 2561327494111820313
方法二:
1! + 2! + 3! + ... + 20! = 2561327494111820313
方法三:
1! + 2! + 3! + ... + 20! = 2561327494111820313
方法四:
1! + 2! + 3! + ... + 20! = 2561327494111820313
posted @ 2021-05-28 17:03  北樟有棵蓝花楹  阅读(424)  评论(0)    收藏  举报