chapter6 高阶函数

##map-reduce
#
print('-----map/reduce----')

def f(x):
    return x * x

r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
print(list(r))

print(list(map(str, [1, 2, 3, 4, 5, 6, 7])))

from functools import reduce 
def add(x, y):
    return x + y

r = reduce(add, [1, 3, 5, 7, 9])
print(r)

def fn(x, y):
    return x * 10 + y
print(reduce(fn, [1, 3, 5, 7, 9]))

def char2num(i):
    digits = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}
    return digits[i]

def fn(x, y):
    return x * 10 + y

print('map-reduce:', reduce(fn, map(char2num, '13579')))

DIGITS = {'0':0, '1':1, '2':2, '3':3, '4':4, '5':5, '6':6, '7':7, '8':8, '9':9}

def str2int(s):
    def fn(x, y):
        return x * 10 + y
    def char2num(i):
        return DIGITS[i]
    return reduce(fn, map(char2num, s))

print('str2int:', str2int('13579'))

##lambda
#我还不会写/🙂/

##练习
def normalize(name):
    return name[:1].upper()+name[1:].lower()

L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)



##filter
print('-----filter-----')
def is_odd(n):
    return n % 2 == 1
print(list(filter(is_odd, [1, 2, 3, 4, 5, 6, 7, 8, 9])))

def not_empty(s):
    return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B', None, 'C', '  '])))

#构造一个从3开始的奇数系列
def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n

#筛选函数   返回的是一个函数 x % 5 > 0
def _not_divisible(n):
    return lambda x: x % n > 0

#生成器,不断返回下一个素数
def primes():
    yield 2
    it = _odd_iter()
    while True:
        n = next(it)
        yield n 
        it = filter(_not_divisible(n), it)

for n in primes():
    if n < 20:
        print(n)
    else:
        break

##回数练习
def is_palindrome(n):
    s = str(n)
    for i in range(0, len(s)//2):
        if(s[i] != s[len(s) - i - 1]):
            return False
    return True

print(list(filter(is_palindrome, range(1, 1000))))


##sorted
#
print('---sorted---')

print(sorted([36, 5, -12, 9, -21]))
print(sorted([36, 5, -12, 9, -21], key = abs))

print(sorted(['bob', 'about', 'Zoo', 'Credit'], key = str.lower))
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key = str.lower, reverse = True))


L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_score(l):
    return l[1]
def by_name(l):
    return l[0].lower()
print(sorted(L, key=by_score, reverse=True))
print(sorted(L, key=by_name))

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容