chapter6 高階函數(shù)

##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
#我還不會(huì)寫/??/

##練習(xí)
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', '  '])))

#構(gòu)造一個(gè)從3開(kāi)始的奇數(shù)系列
def _odd_iter():
    n = 1
    while True:
        n = n + 2
        yield n

#篩選函數(shù)   返回的是一個(gè)函數(shù) x % 5 > 0
def _not_divisible(n):
    return lambda x: x % n > 0

#生成器,不斷返回下一個(gè)素?cái)?shù)
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

##回?cái)?shù)練習(xí)
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))

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容