All is well 3 idiots

AC小小常

【Python函数与模块】(21)常用的高阶函数(filter,map,reduce)

写在前面lambda函数是一种表达式,创建内嵌的简单匿名函数

1. filter函数

  返回一个filter对象,其中包含对其执行函数时结果为真的所有元素

  filter(func, seq)

def use_filter(l):
    """
    获取指定列表/元组中的奇数
    :param l: list/tuple 要过滤的数据
    :return: 过滤好的奇数列表
    """
    res = filter(lambda n: n % 2 != 0, l)
    return res


if __name__ == "__main__":
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    rest = use_filter(lst)
    # print(rest)  # 输出:<filter object at 0x000001FA42A57548>
    print(list(rest))  # 输出:[1, 3, 5, 7, 9, 11]

 

2. map函数

  创建一个列表,其中包含指定序列包含的项执行指定函数的返回值

  map(func, seq, ...)

def pow_number(l):
    """
    根据指定的列表数据,计算每一项的立方
    :param l: list/tuple 列表或者元组
    :return: 原列表/元组中每一项的立方
    """
    rest_list = []
    for x in l:
        rest_list.append(x * x * x)
    return rest_list


def pow_number_use_map(l):
    """
    使用map函数计算给定列表中每一项的立方
    :param l: list/tuple 列表或者元组
    :return: 原列表/元组中每一项的立方
    """
    return map(lambda n: n * n * n, l)


if __name__ == "__main__":
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    # print(pow_number(lst))
    rest = pow_number_use_map(lst)
    # print(rest)  # 输出:<map object at 0x00000226316566C8>
    print(list(rest))

 

3. reduce函数

  使用指定函数将前两个元素合二为一,再将结果与第3个元素合二为一,以此类推,直到处理完整个序列并得到一个结果

  reduce(func, seq[, initial])

    等价于:func(func(func(seq[0], seq[1]), seq[2]), ...)

    实现递归的效果

from functools import reduce


def get_sum(l):
    """
    根据给定列表,求每项加起来的和
    :param l: 里面是整数
    :return: 所有项的和
    """
    rest = 0
    for i in l:
        rest += i
    return rest


def get_sum_use_py(l):
    """
    使用内置方法:根据给定列表,求每项加起来的和
    :param l: 里面是整数
    :return: 所有项的和
    """
    return sum(l)


def get_sum_use_reduce(l):
    """
    使用reduce方法:根据给定列表,求每项加起来的和
    :param l: 里面是整数
    :return: 所有项的和
    """
    return reduce(lambda m, n: m + n, l)


if __name__ == "__main__":
    lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    print(get_sum(lst))
    print("-----------")
    print(get_sum_use_py(lst))
    print("-----------")
    print(get_sum_use_reduce(lst))

 

posted on 2020-04-13 13:50  AC小小常  阅读(177)  评论(0编辑  收藏  举报

导航