python使用reduce和map函数实现求 100 内的所有质数

一、ruduce函数


reduce(function, sequence[, initial]) -> value    其中包含三个参数,第一个是传入的函数,第二个是是一个可迭代类型的参数,第三个是初始值

情况一:不传入第三个参数,即不传入初始值,默认会以    可迭代类型的参数的   第一个参数作为初始值。

比如下面的操作:

我们这里选取下面的代码讲解:

from functools import reduce
print(   reduce( lambda x,y:x-y,range(-5,-1) )    )

这里我们不传入初始值的时候,结果是   4,为什么呢,它底层的执行步骤是这样的

初始值是可迭代类型第一个值,即  -5

第一步:-5-(-4)得到-1

第二步:-1-(-3)得到 2

第三步: 2-(-2)得到 4

结果  4

如果是下面的代码,步骤解析如下:

from functools import reduce
print(     reduce(  lambda x,y:x+y, range(-5,-1) )      )

第一步:-5+(-4)=(-9)

第二步:(-9)+(-3)=(-12)

第三步:(-12)+(-2)=(-14)

结果    -14

情况二:传入第三个参数,即传入初始值

比如下面的操作:

from functools import reduce
print(      reduce(  lambda x,y:x-y, range(-5,-1) ,0 )    )

运行得到的结果是  14

第一步:0-(-5)=5

第二步:5-(-4)=9

第三步:9-(-3)=12

第四步:12-(-2)=14

结果   14

如果是下面的代码,

from functools import reduce
print(reduce(lambda x,y:x+y,range(-5,-1),0))

步骤解析如下:

0+(-5)=-5

-5+(-4)=(-9)

(-9)+(-3)=(-12)

(-12)+(-2)=(-14)

结果  -14

二、map函数

实际上map函数就相当于for循环遍历列表

map(function, iterable, ...)

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

实例

以下实例展示了 map() 的使用方法:

三、案例:

求 100 内的所有质数

from functools import reduce
print(    reduce( lambda mylist,y:not 0 in map(lambda x:y%x,mylist) and mylist+[y] or mylist,range(2,100),[ ] )     )

该表达式reduce函数传入三个参数,第一个是匿名函数,第二个是range(2,100),第三个是 [ ]

首先先讲解   condition   and expr1   or   expr2 

如果  condition   为真,expr1 为真,expr2不做处理,直接返回  expr1 

如果  condition   为假,expr1 不做处理,直接返回  expr2

如果  condition   为真,expr1 为假,直接返回  expr2

这里要注意:如果 expr1 表达式为真,那么 condition   and expr1   or   expr2 可以简化为

condition   为真,返回  expr1 

condition   为假,返回  expr2

即相当于   if  else 语句

讲解代码

其中,reduce的函数的初始值是 空列表 [ ] mylist,其中 not 0 in map(lambda x:y%x,mylist) 表示数字y 能否被 mylist 中任何一个数字整除,如果整除的结果是非0,添加到mylist中,即执行mylist+[y] 得到一个新列表;如果是0,则仍然是mylist

举例:range中第一个数字是2,   2%[]列表是结果是[],即非0,把2加到mylist中,

接着第二个数字是3,3%mylist中的数字每一个数字,而mylist此时只有数字2,即3%2,结果非0,把3加到mylist中

发布了355 篇原创文章 · 获赞 84 · 访问量 11万+

猜你喜欢

转载自blog.csdn.net/qq_43193797/article/details/103270226