Python中filter、lambda、map、reduce的使用

filter
官方释义:

>>> help(filter)
Help on built-in function filter in module __builtin__:

filter(...)
    filter(function or None, sequence) -> list, tuple, or string

    Return those items of sequence for which function(item) is true.  If
    function is None, return the items that are true.  If sequence is a tuple
    or string, return the same type, else return a list.

返回类型是列表、字符串或者元组,如果序列本身是字符串或者元组,返回的也是字符串或者元组,其他都返回列表。返回序列中逐个应用函数(或者没有函数)之后结果为true的所有元素。
例:

>>> def foo(x):
...     return x % 2 != 0 and x % 3 != 0
... 
>>> filter(foo, range(2,10))
[5, 7]

>>> filter(None, range(2, 10))

>>> numbers = range(-5 , 5)
>>> numbers
[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
>>> filter(lambda x : x > 0, numbers)
[1, 2, 3, 4]

>>> filter(lambda c : c != 'i', 'fajououqiyi')
'fajououqy'

filter函数使用方法小结

  • filter的第一个参数是函数名或者None,一定要有,不然会报错,如果使用函数只要写函数的名称即可,不需要括号或者参数
  • filter的第二个参数是要操作的序列

lambda
简洁的计算函数。
例:

>>> numbers = range(10)
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> num_new = []
>>> lam = lambda x : x + 3
>>> for i in numbers:
...     num_new.append(lam(i))
...     
>>> num_new
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

>>> g = lambda x, y : x + y
>>> g(3, 4)
7

>>> (lambda x : x**2)(4)
16

lambda函数使用方法小结

  • 在lambda后面直接跟变量
  • 变量后面是冒号
  • 冒号后面是表达式,表达式计算结果就是本函数的返回值

map
官方释义:

>>> help(map)
Help on built-in function map in module __builtin__:

map(...)
    map(function, sequence[, sequence, ...]) -> list

    Return a list of the results of applying the function to the items of
    the argument sequence(s).  If more than one sequence is given, the
    function is called with an argument list consisting of the corresponding
    item of each sequence, substituting None for missing values when not all
    sequences have the same length.  If the function is None, return a list of
    the items of the sequence (or a list of tuples if more than one sequence).
  • 返回的是序列应用函数之后的结果,返回结果是一个列表
  • 如果函数不为None,并且只有一个序列参数,一次将序列中的元素应用函数(实际上就是for循环)
  • 如果函数不为None,并且有多个序列参数,就将序列参数中对应的元素构成元组再应用函数
  • 如果函数为None,则返回序列本身(如果有多个序列参数,序列中的每个元素就是元组)
    例:
>>> numbers = range(10)
>>> numbers
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> map(lambda x : x + 3, numbers)
[3, 4, 5, 6, 7, 8, 9, 10, 11, 12]

>>> map(None, numbers)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> map(None, numbers, numbers)
[(0, 0), (1, 1), (2, 2), (3, 3), (4, 4), (5, 5), (6, 6), (7, 7), (8, 8), (9, 9)]

>>> map(None, numbers, numbers, numbers)
[(0, 0, 0), (1, 1, 1), (2, 2, 2), (3, 3, 3), (4, 4, 4), (5, 5, 5), (6, 6, 6), (7, 7, 7), (8, 8, 8), (9, 9, 9)]

>>> items = range(1, 6)
>>> map(lambda x : x**2, items)
[1, 4, 9, 16, 25]

>>> items = range(1, 6)
>>> items1 = range(6, 11)
>>> map(lambda x , y : x + y, items, items1)
[7, 9, 11, 13, 15]

reduce
官方释义:

>>> help(reduce)
Help on built-in function reduce in module __builtin__:

reduce(...)
    reduce(function, sequence[, initial]) -> value

    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
    of the sequence in the calculation, and serves as a default when the
    sequence is empty.
  • 依次将序列中元素应用函数
  • 最后返回的是一个元素而不是序列
    例:
>>> reduce(lambda x, y : x * y, range(1, 6))
120

有两个 list,a = [3,9,8,5,2],b=[1,4,9,2,6],计算:a[0]b[0]+a[1]b[1]+…的结果。

>>> a = [3, 9, 8, 5, 2]
>>> b = [1, 4, 9, 2, 6]
>>> sum(x * y for x, y in zip(a, b))
133

>>> reduce(lambda x , y : x + y, map(lambda x, y : x * y, a, b))
133
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值