Python interview - reduce & map & filter

Python有很多有用有趣的内置函数,比如reduce,map,filter,lambda,zip等。已经写过了lambda和zip相关的博客。继续写关于reduce,map,filter。

Map

首先用help方法看一下map的具体用法。

help(map)

# result

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).

map函数,map(function, sequences),然后返回一个list。如果超过一个sequence,那么就会根据function来访问每个list中的依次对应的元素,如果sequence不等长,那么会用None来代替不够的元素。如果function是None,就会返回一个list,或者如果是多个list的话,就会返回一个包含很多tuples的list。

l1 = [1,2,3,4,5]

def func(x):
    return x*x

print map(func, l1)

# result

[1, 4, 9, 16, 25]

如果是两个sequences

l1 = [1,2,3,4,5]
l2 = [6,7,8,9,10]

def func(x,y):
    return x+y

print map(func, l1, l2)

# result

[7, 9, 11, 13, 15]

方法有所改变,因为是两个lists,所以方法有两个参数。

对于不等长的sequences

l1 = [1,2,3,4,5,6]
l2 = [6,7,8,9,10]

def func(x,y):
    return y

print map(func, l1, l2)

# result

[6, 7, 8, 9, 10, None]

我们可以看到,较短的list,输出的时候会用None代替。

map可以和lambda一起用

l1 = [1,2,3,4,5]

print map((lambda x: x **2), l1)

# result

[1, 4, 9, 16, 25]

当我们使用lambda作为一个function的时候,我们可以传入list of function作为sequence

def square(x):
        return (x**2)
def cube(x):
        return (x**3)

funcs = [square, cube]
for r in range(5):
    value = map(lambda x: x(r), funcs)
    print value

# result

[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]

如果function是None的话

l1 = [1,2,3,4,5]
l2 = [6,7,8,9,10]

print map(None, l1, l2)

# result

[(1, 6), (2, 7), (3, 8), (4, 9), (5, 10)]

map就像是一个for loop,对sequence中的元素依次进行操作。

from math import sqrt

def mymap(aFunc, aSeq):
	result = []
	for x in aSeq: result.append(aFunc(x))
	return result

print list(map(sqrt, [1, 2, 3]))

print mymap(sqrt, [1, 2, 3])

# result

[1.0, 1.4142135623730951, 1.7320508075688772]
[1.0, 1.4142135623730951, 1.7320508075688772]

Filter

用help看一下filter的用法

help(filter)

# result

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.

filter函数,同样是filter(function,sequence),返回list,tuple,或者string。返回经过function判断过之后是true的元素。如果function是None,那么就返回true的元素。如果sequence是tuple或者string,返回同样的类型,如果是其他类型,就返回list。

print list(range(-5,5))

print list(filter((lambda x: x<0), range(-5,5)))

# result

[-5, -4, -3, -2, -1, 0, 1, 2, 3, 4]
[-5, -4, -3, -2, -1]

如果function是None

print list(filter(None, range(-5,5)))

# result

[-5, -4, -3, -2, -1, 1, 2, 3, 4]

只有0没有输出,因为0这里被认为是False。

其他类型

def f(x):
    return x != 'a'

print filter(f, 'abcdef')

# result

bcdef

Reduce

用help看一下reduce的用法

help(reduce)

# result

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函数,reduce(function,sequence[,initial])返回一个值。把sequence中的元素从左往右两个两个根据function操作起来,最终剩下一个值。比如reduce(lambda x,y:x+y,[1,2,3,4,5]) 运行的过程就是((((1+2)+3)+4)+5). initial可以设置作为一个default,如果sequence是空的话。

def add(x,y):
    return x+y

print reduce(add, range(1,11))
print reduce(add, range(1,11), 20)
print reduce(add, [],20)

# result

55 (1+2+3+4+5+6+7+8+9+10)
75 (20+1+2+3+4+5+6+7+8+9+10)
20 (default)<span style="font-family: Arial, Helvetica, sans-serif;"></span>

同样的也可以配合lambda一起使用

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

# result

24 (1*2*3*4)
时间: 2024-11-07 11:11:21

Python interview - reduce & map & filter的相关文章

python中 Lambda,Map,Filter,Itertools,Generator高级函数的用法

Lambda 函数 Lambda 函数是一种比较小的匿名函数--匿名是指它实际上没有函数名. Python 函数通常使用 def a_function_name() 样式来定义,但对于 lambda 函数,我们根本没为它命名.这是因为 lambda 函数的功能是执行某种简单的表达式或运算,而无需完全定义函数. lambda 函数可以使用任意数量的参数,但表达式只能有一个. x = lambda a, b : a * b print(x(5, 6)) # prints '30' x = lambd

python学习--lambda map filter reduce yield

lambda: map

Python特殊语法:filter、map、reduce、lambda [转]

Python内置了一些非常有趣但非常有用的函数,充分体现了Python的语言魅力! filter(function, sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回:>>> def f(x): return x % 2 != 0 and x % 3 != 0 >>> filter(f, range(2, 25)) [5,

Python【map、reduce、filter】内置函数使用说明

介绍下Python 中 map,reduce,和filter 内置函数的方法: 一:map map(...)     map(function, sequence[, sequence, ...]) -> list 说明: 对sequence中的item依次执行function(item),执行结果输出为list. 例子: >>> map(str, range(5))           [, , , , ]        >>>  add(n): n+>&

Python 函数式编程--高阶函数Map、Reduce、Filter、Sorted

1.1   高阶函数 变量可指向函数 >>> abs(-10) 10 >>> x = abs    --x指向abs函数 >>> x(-1)      --直接调用x 1 调用abs和调用x完全相同. 函数名也是变量 >>> abs = 10 >>> abs(-10) Traceback (most recent call last): File "<stdin>", line 1,

Python里的map、reduce、filter、lambda、列表推导式

Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x): return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81] Reduce函数 原型:reduce(function, sequence, startValue),作用是将一个列表归纳为一个输出,使用方法: def f2(x,y): return x+y reduce

Python中map,filter,reduce的应用

事例1: l=[('main', 'router_115.236.xx.xx', [{'abc': 1}, {'dfg': 1}]), ('main', 'router_183.61.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_52.11.xx.xx', [{'abc': 0}, {'dfg': 1}]), ('main', 'router_183.17.xx.xx', [{'abc': 1}, {'dfg': 1}]) ] 检查参数l

Python一些特殊用法(map、reduce、filter、lambda、列表推导式等)

Map函数: 原型:map(function, sequence),作用是将一个列表映射到另一个列表, 使用方法: def f(x):     return x**2 l = range(1,10) map(f,l) Out[3]: [1, 4, 9, 16, 25, 36, 49, 64, 81] Reduce函数 原型:reduce(function, sequence, startValue),作用是将一个列表归纳为一个输出, 使用方法: def f2(x,y):     return x

[译]PYTHON FUNCTIONS - MAP, FILTER, AND REDUCE

map, filter, and reduce Python提供了几个函数,使得能够进行函数式编程.这些函数都拥有方便的特性,他们可以能够很方便的用python编写. 函数式编程都是关于表达式的.我们可以说,函数式编程是一种面向表达式的编程. Python提供的面向表达式的函数有: map(aFunction, aSequence) filter(aFunction, aSequence) reduce(aFunction, aSequence) lambda list comprehensio