5-高阶函数

map

map()接受2个参数,一个函数 , 一个Iterable,返回Iterator


def f(x):
    return x*x
r = map(f, [1, 2, 3, 4 ,5])
print(list(r))  # 强转 由于Iterator是惰性序列

list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 转字符串

多参数映射:当多个列表元素个数不同时,以最小个数的为基准


list1 = [1, 2, 3, 4]
list2 = [1, 2, 3, 4]
list3 = [1, 2, 3, 4]
list4 = [1, 2, 3, 4]


def addList(x, y, z, k):
    return  x + y + z + k
print(list(map(addList, list1,list2,list3,list4)))


reduce

把一个函数作用在一个序列[x1, x2, x3, …]上
reduce(func, iter [,initail]) initail设置为初始值
这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

# 把序列变成整数13579
from functools import reduce
def fn(x,y):
    return  x*10 + y
print(reduce(fn, [1, 3, 5, 7, 9]))

filter

用于过滤序列 然后根据返回值是True还是False决定保留还是丢弃该元素

def is_odd(n): # 删除偶数
    return n%2 ==1
print(list(filter(is_odd, [1, 2, 4, 5, 7, 10, 15]))) 
# 返回都是是迭代器

# 把序列中的空字符串去掉
def not_empty(s):
    return s and s.strip()
print(list(filter(not_empty, ['A', '', 'B ', None, 'C', '  '])))

# 求素数
#计算素数的一个方法是埃氏筛法
def _odd_iter():  # 构成一个从3开始的奇数序列
    n =1            # 注意这是一个生成器,并且是一个无限序列
    while True:
        n = n + 2
        yield n

def _not_divisible(n): # 筛选函数
    return lambda x:x%n > 0 #获得对n取余不为0的序列(比如删除所有是2倍数的数字)


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 < 1000:
        print(n)
     else:
         break

sorted

返回一个列表,如果对字典sorted,返回一个列表,列表中的元组存放键值对


print(sorted([-36, 5, -12, 9]))
print(sorted([-36, 5, -12, 9], key=abs)) # 按绝对值排序
print(sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)) # reverse=True

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]

print(sorted(L, key=lambda t:t[1]))  # 按成绩排

# 字典按键排序
sorted(dict1.items(), key = lambda x:x[0])
# 字典按值排序
sorted(dict1.items(), key = lambda x:x[1])

# a = [{'年龄':12, '姓名':'7刘'},{'年龄':11, '姓名':'7刘'},{'年龄':18, '姓名':'6刘'},{'年龄':7, '姓名':'刘'}]
# 字典没有.sort方法 而列表可以用
a.sort(key=lambda x:x['年龄'])

    
    原文作者:rottengeek
    原文地址: https://segmentfault.com/a/1190000014531404
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞