发表于: 2018-03-12 22:24:10
1 1060
今天 看明白了 斐波拉契函数 和 杨辉三角 新学 map(),reduce( ),filter(),sorted()
1.斐波拉契函数
def fib(max):
n, a, b = 0, 0, 1
while n<max:
yield b #中断并 输出 b(第一轮b=1)
a,b = b,a+b #b 赋值给a ,a+b赋值给b 第一轮 a=b=0,b=a+b=0+1=1,[1]第二轮 先输出 b=1,a=b=1 ,b=a(上轮中的a=0)+b=1 [1]
n = n+1
return 'done'
for i in fib(6):
print(i)
输出:
1
1
2
3
5
8
2.杨辉三角
def yanghui():
L = [1]
while True:
yield L #有了 yield 就是 generator 函数
L.append(0) # 在L后每次都加一项
L = (L[x-1]+L[x] for x in range(len(L)))# range (2) >>> [0,1]
n = 0
for i in yanghui(): #遍历generator
print(i)
n = n + 1
if n == 10:
break
输出:
map() (函数 ,可迭代对象) map是 一个 Tterator
list(map(int,'123456'))
....[1,2,3,4,5,6]
list(map(lambda x : x*x,[1,2,3]))
....[1,4,9]
reduce() 把函数 作用在序列上 作累积。 会把计算结果当做下次循环的参数
reduce(lambda x,y : x*10 +y,[1,2,3,4])
.....[1234]
廖雪峰练习:利用map()
函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。
def normalize(name):
return name[0].upper() + name[1:].lower() # upper() 字符串首大写 lower() 小写
L1 = ['Bai', 'CHEN', 'sONG']
L2 = list(map(normalize,L1))
print(L2)
输出:
python提供的sum()
函数可以接受一个list并求和,请编写一个prod()
函数,可以接受一个list并利用reduce()
求积
from functools import reduce
def prod(L):
return reduce(lambda x,y:x*y, L)
print('3*5*7*9 = ',prod([3,5,7,9]))
利用map
和reduce
编写一个str2float
函数,把字符串'123.456'
转换成浮点数123.456
:
from functools import reduce
def str2float(s):
def hanshu(x,y):
return x*10 + y
n = s.index('.') #找到小数点儿的序列号
s1 =list(map(int,s[:n])) #小数点以前
s2 =list( map(int,s[n+1:])) #小数点以后
return reduce(hanshu,s1) + reduce(hanshu,s2)/10**len(s2)
print(str2float('123,456'))
filter()用于过滤序列 只有当 函数 True 时才保留参数
def hanshu(x):
return x%2 ==1
print(list(filter(hanshu,[1,2,3,4,5,6,7,8])))
....[1,3,5,7]
def hanshu():
return s and s.strip() #strip() #去除空字符串
print(list(filter(hanshu,['A',' ','b',None])))
..... ['A','b']
这里 有个问题:
有些没看懂这个 函数 ,,_not_divisible(n)是啥意思。。
每天时间有限 明天 继续 钻研吧 。。
评论