一个用到filter,map,reduce的小问题

     今天碰到一个小程序,正好可以用到Python的filter,map和reduce方法。感觉很有意思,顺便就写下来吧。问题是这样的:

     两个小伙伴,数字214和77感觉自己的运气一直不好,想来想去,原来是和7有关,如下:

     

2+1+4=7
77%7=11
7%11=77

 

 

      满足如下规则就是和7有关,

 

      

1. 本身是7的倍数
2. 数字里包含7
3. 数字各位累加时7的倍数

 

 

 

下一个小程序,计算出一定范围内和7不相关的数字的平方和。

 

    题目很简单,可以用各种语言实现,这里的demo是Python实现的。

 

    我们可以把这个过程分成这样几个步骤:

  •     产生一定范围内的数字
  •     去掉和7相关的数字
  •     计算平方和

 

    第一步很简单:

    range(), 10以内的range(10), 即: [1,2,3,4,5,6,7,8,9]

 

     第二部过滤:

     filter(function or None, sequence) -> list, tuple, or string

     reduce(function, sequence[, initial]) -> value

    function如下:

    

def handle(num,noluck=7):
	if num %noluck==0:
		return False
	l = [string.atoi(x) for x in str(num)]
	for num in l:
		if num%noluck==0:
			return False
	if reduce(lambda x,y:x+y, l)%noluck==0:
		return False
	return True

 

 

     这样去掉之后的结果是:filter(handle, range(10))

 

      第三部是计算:

      map(function, sequence[, sequence, ...]) -> list

     

reduce(lambda x,y: x+y, map(lambda x:x*x,filter(handle, range(10))))

 这里还用到了lambda和表达式推导。是不是很有意思?只有真正玩python的人才知道其中好玩的地方 :-)

    
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值