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中

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值