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() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
例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 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用其获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。
每个列表推导式都在 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}
>>>defsquare(x) : # 计算平方数 ... returnx ** 2 ... >>> map(square, [1,2,3,4,5])# 计算列表各个元素的平方[1, 4, 9, 16, 25] >>> map(lambdax: x ** 2, [1, 2, 3, 4, 5])# 使用 lambda 匿名函数[1, 4, 9, 16, 25]# 提供了两个列表,对相同位置的列表数据进行相加 >>> map(lambdax, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])[3, 7, 11, 15, 19]
原文:https://www.cnblogs.com/wenm1128/p/11615693.html