zoukankan      html  css  js  c++  java
  • Python内置函数

    map,filter, reduce, zip都是针对python中的sequence数据类型的内置方法。

    一、map

     map(func, *iterables)

     先来看看map函数,接收两个参数,第一个是函数,第二个是序列(可迭代对象),map的作用是将序列中的每一个元素传入函数中,并将返回结果加入新列表。

     例:

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

    def trans(x):
        return x.capitalize()
    
    print(list(map(trans, ['adam', 'LISA', 'barT'])))
    
    # ['Adam', 'Lisa', 'Bart']
    

     也可以用匿名函数,同样可以得到相同的结果:

    print(list(map(lambda x: x.capitalize(), ['adam', 'LISA', 'barT'])))
    
    # ['Adam', 'Lisa', 'Bart']  

     当然,不用map,使用列表推到式也没问题:

    print([x.capitalize() for x in ['adam', 'LISA', 'barT']])
    # ['Adam', 'Lisa', 'Bart']

     二、reduce

    reduce(function, sequence)

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

    reduce(f, [x1, x2, x3, x4])   <-->   f(f(f(x1, x2), x3), x4)

    注意:在Python3中reduce需要导入

    from functools import reduce

     例1:

     将一个列表中的每个元素自加3,然后对列表中的元素求和。

     最简单的方式,用sum和列表推导式就可以完成:

    li = [1, 2, 3, 4, 5, 6]
    print(sum([x + 3 for x in li]))
    # 39

     或者:

    li = [1, 2, 3, 4, 5, 6]
    print(reduce(lambda x, y: x + y, [x + 3 for x in li]))
    
    # 39  

     例2:

     Python提供的sum()函数可以接受一个list并求和,请编写一个prod()函数,可以接受一个list并利用reduce()求积。

    def prod(li):
        return reduce(lambda x, y: x * y, li)
    
    print(prod([1,2,3,4]))    # 24

     或者:

    print(reduce(lambda x, y: x * y, [1, 2, 3, 4]))   # 24
    

     三、zip

    zip(iter1 [,iter2 [...]])

    zip函数会对每个sequence对象依次取相同索引的值到一个tuple中,然后返回一个由这些tuple组成的列表。tuple的数量由所有sequence中具有最少索引的那个sequence决定,该sequence取值完毕后便不再继续对剩余的sequence取值。  

    >>> zip([1,2,3,4],[2,3,4,5])
    [(1, 2), (2, 3), (3, 4), (4, 5)]
    >>> zip([1,2,3,4], (2,3,4,5,6,7))
    [(1, 2), (2, 3), (3, 4), (4, 5)]
    >>> zip([1,2,3,4], [[2,3,4],[2,3]])
    [(1, [2, 3, 4]), (2, [2, 3])]  

     四、filter  

    filter(function or None, iterable)

    filter的工作原理是使用第一个参数对象(function或者None)来对第二参数对象iterable进行运算,并根据运算结果的布尔值来过滤iterable中的元素。

    对function返回值的布尔运算,如果为True,则将当前元素存储到string, tuple或者list中并最终返回对应类型的对象;如果为False,则将当前元素过滤掉,如果function没有返回值,则视为返回None,因此所有元素都会被过滤掉。如果第一个参数不是function而是None,则返回iterable中所有为True的元素。

    >>> filter(lambda d: d != 'a', 'abcd')  # 过滤掉了字母'a'。
    'bcd'
    

      

    -----------------------------------------------------------------------------------------------------------

  • 相关阅读:
    学习的过程必须要知其所以然
    根据人类的学习与记忆过程来高效学习
    大脑的信息获取特点与记忆模式
    31个让你变聪明的有效方法
    心智模式:心智模式的更多资料
    心智模式:仁者见仁、智者见智
    心智模式:如何看待成败?
    心智模式:如何面对逆境?
    心智模式:认识你自己
    阿里巴巴JAVA工程师面试经验
  • 原文地址:https://www.cnblogs.com/pyramid1001/p/6648664.html
Copyright © 2011-2022 走看看