美文网首页
Python中的Lambda,Map和Filter

Python中的Lambda,Map和Filter

作者: 开心人开发世界 | 来源:发表于2019-09-16 09:48 被阅读0次

今天的部分介绍了在Python中使用lambda,map和filter函数。我们将介绍每个的基本语法,并通过一些示例来熟悉使用它们。让我们开始吧!


*** Lambda***

lambda运算符或lambda函数用于在Python中创建小型的、一次性的匿名函数对象

基本语法

lambda arguments : expression

lambda运算符可以有任意数量的参数,但只能有一个表达式。它不能包含任何语句,并返回一个可以分配给任何变量的函数对象。

例子

我们来看看Python中的一个函数:

 def add(x, y): 
    return x + y
  
# Call the function
add(2, 3)  # Output: 5

上面的函数名是add它需要两个参数xy并返回它们的和。

让我们看看如何将上述函数转换为lambda函数:

add = lambda x, y : x + y 
  
print add(2, 3) # Output: 5

在***lambda x中,y:x + y; *x和y是函数的参数,x + y是执行的表达式,其值作为输出返回。

lambda x,y:x + y返回一个可以赋值给任何变量的函数对象,在这种情况下,函数对象被赋值给* add*变量。

type (add) # Output: function

如果我们检查add的类型,它就是一个函数。

最重要的是,lambda函数作为参数传递给一个函数,该函数需要一个函数对象作为参数,如map,reduce和filter函数。


map

基本语法

map(function_object, iterable1, iterable2,...)

map函数需要一个函数对象和任意数量的iterables,例如list,dictionary等。它为序列中的每个元素执行function_object,并返回由函数对象修改的元素列表。

例子

def multiply2(x):
  return x * 2
    
map(multiply2, [1, 2, 3, 4])  # Output [2, 4, 6, 8]

在上面的例子中,map对列表中的每个元素[1,2,3,4] 执行multiply2函数,并返回[2,4,6,8]。

让我们看看如何使用maplambda编写上面的代码。

map(lambda x : x*2, [1, 2, 3, 4]) #Output [2, 4, 6, 8]

只需一行代码!

使用Map和Lambda迭代Dictionary

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]
  
map(lambda x : x['name'], dict_a) # Output: ['python', 'java']
  
map(lambda x : x['points']*10,  dict_a) # Output: [100, 80]

map(lambda x : x['name'] == "python", dict_a) # Output: [True, False]

在上面的例子中,每个字典dict_a将作为参数传递给传递lambda功能。每个dictlambda函数表达式的结果将作为输出给出。

多个iterable Map函数

我们可以将多个序列传递给map函数,如下所示:

list_a = [1, 2, 3]
list_b = [10, 20, 30]
  
map(lambda x, y: x + y, list_a, list_b) # Output: [11, 22, 33]

这里,list_alist_b的每个第i个元素将作为参数传递给lambda函数。

在Python3中,map函数返回一个* iteratormap对象*,它被延迟地计算,类似于zip函数的计算方式。在zip函数文章中更详细地解释了延迟求值。

我们不能用索引访问map对象的元素,也不能*len()*用来查找map对象的长度。

但是,我们可以强制将map输出(即map对象)转换为列表,如下所示:

map_output = map(lambda x: x*2, [1, 2, 3, 4])
print(map_output) # Output: map object: <map object at 0x04D6BAB0>

list_map_output = list(map_output)

print(list_map_output) # Output: [2, 4, 6, 8]

Filter

基本语法

filter(function_object, iterable)

该函数需要两个参数:和一个可迭代的。返回一个布尔值,并为iterable的每个元素调用。只有过滤器返回这些元素为其回报。*filter*``*function_object*``*function_object*``function_object``*true*

*map*函数一样,filter函数也返回元素列表。与此不同*map*,该*filter*函数只能有一个可迭代的输入。

例子

偶数使用过滤功能:

a = [1, 2, 3, 4, 5, 6]
filter(lambda x : x % 2 == 0, a) # Output: [2, 4, 6]

过滤词典列表:

dict_a = [{'name': 'python', 'points': 10}, {'name': 'java', 'points': 8}]

filter(lambda x : x['name'] == 'python', dict_a) # Output: [{'name': 'python', 'points': 10}]

类似于*map*,Python3中的过滤器函数返回一个过滤器对象或延迟评估的迭代器。我们不能用索引访问过滤器对象的元素,也不能*len()*用来查找过滤器对象的长度。

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

filter_obj = filter(lambda x: x % 2 == 0, list_a) # filter object <filter at 0x4e45890>

even_num = list(filter_obj) # Converts the filer obj to a list

print(even_num) # Output: [2, 4]

翻译自:https://medium.com/better-programming/lambda-map-and-filter-in-python-4935f248593

相关文章

网友评论

      本文标题:Python中的Lambda,Map和Filter

      本文链接:https://www.haomeiwen.com/subject/hggbyctx.html