11–7. 用 map() 进 行 函 数 式 编 程 。 给 定 一 对 同 一 大 小 的 列 表 , 如 [1 , 2 , 3] 和['abc','def','ghi',....],将两个标归并为一个由每个列表元素组 成的元组的单一的表,以使我们的结果看起来像这样:{[(1, 'abc'), (2, 'def'), (3, 'ghi'), ...}.虽然这问题在本质上和第六章的一个问题相似那时两个解没有直接的联系)然后创建用 zip 内建函数创建另一个解。
#11-7-(a)
def fun1():
set1=map(lambda x,y:(x,y),[1,2,3],['abc','def','ghi'])
print('{',sorted(set1),'}')
#11-7-(b)
def fun1():
print('{',list(zip([1,2,3],['abc','def','ghi'])),'}')
11–8. 用 filer()进行函数式编程.使用练习 5-4 你给出的代码来决定闰年。更新你的代码一
边他成为一个函数如果你还没有那么做的话。然后写一段代码来给出一个年份的列表并返回一个只
有闰年的列表。然后将它转化为用列表解析。
#11-8
def isheap(num):
if num%400==0:
return True
elif num%4==0 and num%100 !=0:
return True
return False
def fun1(lis):
return filter(lambda x:isheap(x),lis)
if __name__ == '__main__':
print('-'*5,'The Start','-'*5)
lis=[i for i in range(1900,2040)]
lisheap=[]
ss=fun1(lis)
for i in ss:
lisheap.append(i)
print(lisheap)
print('the output is')
#11-9
import functools
def fun1():
print(functools.reduce(lambda x,y:x+y,[1,2,3])/len([1,2,3]))
11–13.使用 reduce()进行函数式编程以及递归。在第 8 张中,我们看到 N 的阶乘或者 N!作为从1到N所有数字的乘积。
(a) 用一分钟写一个带 x,y 并返回他们乘积的名为 mult(x,y)的简单小巧的函数。
(b)用你在 a 中创建 mult()函数以及 reduce 来计算阶乘。
(c)彻底抛弃掉 mult()的使用,用 lamda 表达式替代。
#11-13-(a)
import functools
def mult(x,y):
result=functools.reduce(lambda x,y:x*y,(x,y))
return result
if __name__ == '__main__':
print('-'*5,'The Start','-'*5)
print(mult(2,3))
print('the output is')
#11-13-(b)
if __name__ == '__main__':
print('-'*5,'The Start','-'*5)
print(mult(2,3))
result=1
for i in range(4):
result *=mult(1,i+1)
print('阶乘结果:',result)
print('the output is')
#11-13-(c)
if __name__ == '__main__':
print('-'*5,'The Start','-'*5)
print(mult(2,3))
result=1
for i in range(4):
result *=functools.reduce(lambda x,y:x*y,(1,i+1))
print('阶乘结果:',result)
print('the output is')