美文网首页
高阶函数map,reduce,filter,sorted,匿名函

高阶函数map,reduce,filter,sorted,匿名函

作者: 一二三开花 | 来源:发表于2020-10-25 20:29 被阅读0次

    map函数:

    map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。(Iterable表示可迭代对象)
    例子:

    >>> def f(x):
    ...     return x * x
    ...
    >>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
    >>> list(r)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    等同于

    L = []
    for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
        L.append(f(n))
    print(L)
    

    把list转换成字符串

    list(map(str,[1, 2, 3, 4, 5, 6, 7, 8, 9]))
    ['1', '2', '3', '4', '5', '6', '7', '8', '9']
    

    reduce函数:

    reduce把一个函数作用在一个序列[x1, x2, x3, ...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

    reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
    

    利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。输入:['adam', 'LISA', 'barT'],输出:['Adam', 'Lisa', 'Bart']:

    L1 = ['AdmIn', 'anny', 'LUCY', 'sandY', 'wILl']
    def normlize(name):
        return name[:1].upper() + name[1:].lower()
        # return name.capitalize()
    
    L2 = list(map(normlize, L1))
    print(L2)
    

    这里name.capitalize()
    capitalize() 将字符串的第一个字母变成大写,其他字母变小写,该方法返回一个首字母大写的字符串。

    filter函数

    把一个序列中的空字符串删掉,可以这么写:

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

    这里strip() 方法用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
    注意:该方法只能删除开头或是结尾的字符,不能删除中间部分的字符。
    返回移除字符串头尾指定的字符生成的新字符串。

    sorted函数

    Python内置的sorted()函数就可以对list进行排序:

    sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:

    >>> sorted([36, 5, -12, 9, -21])
    [-21, -12, 5, 9, 36]
     sorted([36, 5, -12, 9, -21], key=abs)
    [5, 9, -12, -21, 36]
    
    忽略大小写,用lower或者upper
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower)
    ['about', 'bob', 'Credit', 'Zoo']
    要进行反向排序,不必改动key函数,可以传入第三个参数reverse=True:
    >>> sorted(['bob', 'about', 'Zoo', 'Credit'], key=str.lower, reverse=True)
    ['Zoo', 'Credit', 'bob', 'about']
    

    lambda匿名函数

    匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
    用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:

    def build(x, y):
        return lambda: x * x + y * y
    

    相关文章

      网友评论

          本文标题:高阶函数map,reduce,filter,sorted,匿名函

          本文链接:https://www.haomeiwen.com/subject/unbnmktx.html