发表于: 2018-03-12 22:24:10

1 872


今天 看明白了 斐波拉契函数  和 杨辉三角    新学 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]))



利用mapreduce编写一个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)是啥意思。。



每天时间有限  明天 继续 钻研吧  。。


返回列表 返回列表
评论

    分享到