zoukankan      html  css  js  c++  java
  • python学习笔记之--python六剑客

    python六剑客:filter过滤器、map映射函数、lambda匿名函数、reduce累加、切片、推导列表
     
    filter

    filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

    该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

    >>> list(filter(lambda x:x%2,[1,2,3,4]))
    [1, 3]
    >>> list(filter(lambda x:x>='A' and x <='Z',"AaBbCc"))
    ['A', 'B', 'C']
    栗子:
    >>> def is_odd(n):
    ...     return n%2==1
    ...
    >>> tmplist = filter(is_odd,[1,2,3,4,5,6,7,8,9,10])
    >>> newlist = list(tmplist)
    >>> print(newlist)
    [1, 3, 5, 7, 9]
     
    map

    map() 会根据提供的函数对指定序列做映射。

    第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

    map(function,iterable,...)
    function:函数
    iterable:一个或多个序列
    例1:
    >>> list(map(lambda x:str(x)+"*",[1,2,3,4]))
    ['1*', '2*', '3*', '4*']
    例2:
    >>> list(map(lambda x:x ** 2,[1,2,3,4]))   #使用lambda匿名函数
    [1, 4, 9, 16]
    例3:
    >>> def square(x):
    ...     return x**2
    ...
    >>> map(square,[1,2,3,4])    #py3map返回迭代器
    <map object at 0x000001199BF08A90>
    >>> list(map(square,[1,2,3,4]))
    [1, 4, 9, 16]
    例4:
    >>> map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])
    <map object at 0x000001199BF08A58>
    >>> list(map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
    [3, 7, 11, 15, 19]

    lambda匿名函数

    所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。

    lambda 只是一个表达式,函数体比 def 简单很多。
    lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
    lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。 

    语法:lambda [arg1 [,arg2,.....argn]]:expression

    lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值

    >>> def func(x):
    ...     return x**2
    ...
    >>> print(func(4))
    16
    #上面函数例子用lambda实现:
    >>> g = lambda x:x**2
    >>> print(g(4))
    16
    
    #混合使用栗子:
    >>> filter(lambda x:True if x>0 else False,[1,2,-1,-2])
    <filter object at 0x0000000003F54D68>
    >>> list(filter(lambda x:True if x>0 else False,[1,2,-1,-2]))
    [1, 2]

    reduce

    reduce() 函数会对参数序列中元素进行累积。

    函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

     语法:reduce(function, iterable[, initializer])

    function -- 函数,有两个参数
    iterable -- 可迭代对象
    initializer -- 可选,初始参数

    >>> from functools import reduce
    >>> def add(x,y):
    ...     return x+y
    ...
    >>> reduce(add,[1,2,3,4])
    10
    #相当于:
    >>> reduce(lambda x,y:x+y,[1,2,3,4])
    10
     切片
    >>> s=[1,4,7,9,10]
    >>> s[:]
    [1, 4, 7, 9, 10]
    >>> s[::-1]
    [10, 9, 7, 4, 1]
     
    推导列表

    列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。

    每个列表推导式都在 for 之后跟一个表达式,然后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

    >>> [x+1 for x in range(1,10,2)]
    [2, 4, 6, 8, 10]
    
    >>> [x*y for x in range(1,10,2) for y in range(3)]
    [0, 1, 2, 0, 3, 6, 0, 5, 10, 0, 7, 14, 0, 9, 18]
    
    列表推导式可以使用复杂表达式或嵌套函数:
    >>> [str(round(355/113,i)) for i in range(1,6)]
    ['3.1', '3.14', '3.142', '3.1416', '3.14159']
    
    集合也支持推导式:
    >>> a = {x for x in 'abracadabra' if x not in 'abc'}
    >>> a
    {'r', 'd'}
    字典推导可以用来创建任意键和值的表达式词典
    >>> {x: x**2 for x in (2, 4, 6)} {2: 4, 4: 16, 6: 36}
     

     

  • 相关阅读:
    MySQL锁系列3 MDL锁
    MySQL锁系列2 表锁
    MySQL锁系列1
    MySQL open table
    MySQL优化器join顺序
    MySQL优化器cost计算
    MySQL源码 优化器
    MySQL源码 解析器
    MySQL源码 数据结构hash
    微信小程序爬坑日记
  • 原文地址:https://www.cnblogs.com/wenm1128/p/11615693.html
Copyright © 2011-2022 走看看