一个用到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的人才知道其中好玩的地方 :-)

    
 

 

猜你喜欢

转载自david-je.iteye.com/blog/2221750