zoukankan      html  css  js  c++  java
  • Python filter,map,lambda,reduce,列表解析

    filter用法 filter(func,seq)

    将seq的元素逐一代入func,通过func的返回值来判断是保留还是过滤

    1 >>> def foo(x):
    2     return x>3
    3 
    4 >>> filter(foo,range(6))
    5 [4, 5]

    >>> filter(lambda x:x>3,range(6))
    [4, 5]

    6 #注意只需要写函数名,不带参数

    map用法map(func/lambda,seq)

    通过函数对队列中的每个元素进行操作,元素替换成返回值,注意是生成一个新的序列,原来的序列不会变化

    >>> map(lambda x:x*2,range(6))
    [0, 2, 4, 6, 8, 10]
     #同样的,这里要么是lambda表达式,要不就是是个函数名
    >>> a
    [1, 2, 3, 4, 5, 6]
    >>> map(foo,a)
    [False, False, False, True, True, True]
    >>> a
    [1, 2, 3, 4, 5, 6]
    #foo是判断x是否大于三,是返回True,否返回false
    对多个序列的操作

    >>> map(lambda x,y:x+y,range(4),range(5))

    
    

    Traceback (most recent call last):
    File "<pyshell#84>", line 1, in <module>
    map(lambda x,y:x+y,range(4),range(5))
    File "<pyshell#84>", line 1, in <lambda>
    map(lambda x,y:x+y,range(4),range(5))
    TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
    >>> map(lambda x,y:x+y,range(4),range(4))
    [0, 2, 4, 6]

     

    列表解析

    [表达式/函数,for循环]

    >>> [x**2 for x in range(6)]
    [0, 1, 4, 9, 16, 25]
    >>> [a**2 for x in range(6)]
    [1, 1, 1, 1, 1, 1]
    >>> #可见当你写一个for循环中无关的变量时,它仅仅重复表达式的结果
    >>> [foo(x) for x in range(6)]
    [False, False, False, False, True, True]
    #这里的函数要带括号,foo同上
    >>> [lambda x:x**2 for x in range(6)]
    [<function <lambda> at 0x01DE8870>, <function <lambda> at 0x01DE8830>, <function <lambda> at 0x01DE88F0>, <function <lambda> at 0x01DE8930>, <function <lambda> at 0x01DE8970>, <function <lambda> at 0x01DE89B0>]
    >>> [(lambda x:x**2)(x) for x in range(6)]
    [0, 1, 4, 9, 16, 25]
    #同样你需要把lambda看作是函数名,或者返回值
    >>> [x**2 for x in range(6) if x**2>9]
    [16, 25]
    >>> [(x**2,y**3) for x in range(4) for y in range(3) if x>0 and y>0]
    [(1, 1), (1, 8), (4, 1), (4, 8), (9, 1), (9, 8)]
    >>> #将后面的for看成嵌套的,还有前面的表达式记得加括号

    reduce 对sequence中的item顺序迭代调用function,如果有starting_value,还可以作为初始值调用

    >>> reduce(lambda x,y:x+y,range(1,101))
    5050
    >>> #reduce一定是接受一个二元函数,比如上面就是 (((1+2)+3)+4)+...
    >>> reduce(lambda x,y:x+y,range(1,101),100)
    5150
    #接受的初始值
  • 相关阅读:
    图的连通性问题之tarjan算法
    图的连通性问题之强连通分量初步
    NOIP 2010 引水入城
    最短路经典例题 codevs 1557 热浪
    图的连通性问题之连通和最小环
    最短路径算法
    《数据结构与算法-Javascript描述》
    蓝天白云
    《慢慢来,一切都还来得及》
    聚餐
  • 原文地址:https://www.cnblogs.com/dream-for/p/5197501.html
Copyright © 2011-2022 走看看