27python的匿名函数与map函数/filter函数/reduce函数
基本
在 Python 中,可以使用 lambda
关键字来创建匿名函数。这些函数不需要名字,因为它们通常只使用一次。
下面是一个例子:
lambda x: x**2
这是一个计算平方的匿名函数。它接受一个参数 x
,并返回 x
的平方。
你可以将这个函数赋值给一个变量,然后像调用普通函数一样调用它:
codesquare = lambda x: x**2
print(square(5)) # prints 25
匿名函数的一个常见用途是作为另一个函数的参数。例如,你可以使用 sorted
函数来按照某个特定的标准对列表进行排序,而不是按照默认的字典序。你可以使用匿名函数作为 key
参数来指定排序标准:
odeitems = [("product1", 10), ("product2", 9), ("product3", 11)]
items.sort(key=lambda x: x[1]) # sort by price
print(items) # prints [('product2', 9), ('product1', 10), ('product3', 11)]
匿名函数也可以和其他函数一起使用,例如 map
函数。下面是一个例子,使用 map
和匿名函数来对一个数字列表进行平方:
codenumbers = [1, 2, 3, 4]
squared = list(map(lambda x: x**2, numbers))
print(squared) # prints [1, 4, 9, 16]
总之,匿名函数是一种简单的方法来定义一个函数,通常只在当前上下文中使用一次。
map函数也是Python中常用的内置函数之一,下面我们从三个方面介绍:什么是map函数,什么时候用map函数,以及怎么用map函数。此处参考
- 什么是map函数?
map是python内置函数,会根据提供的函数对指定的序列做映射。map()函数的格式是:
map(function,iterable,...)
(1)参数
- function是一个函数名称,通过该函数对后续参数iterable进行处理
- iterable是一个可迭代对象,比如:字符串、列表、字典、元组、集合等
(2)返回值
map函数通过将指定的function函数依次作用在给定序列iterable中的每一个元素上,得到一个新的list并返回。注意,map不改变原list,而是返回一个新list。
- Python2.x 返回列表
- Python3.x 返回生成器
- 什么时候用map函数?
当需要对序列进行某些操作或者处理,将其转换为新的列表时,用map函数是最合适不过了。当然,除了最基本的用法,map函数还有一些特殊的使用技巧,比如:可以进行类型转换(将元组或字符串转换为列表,因为map的返回值是列表),可以提取字典中的key等。
- 如何使用map函数?
(1)基本用法:
>>> def interest(x):
(2)可以在function处使用匿名函数lambda:
>>> list(map(lambda x, y: (x ** y, x+y), [2, 4, 6], [3, 2,1]))
返回值:[(8, 5), (16, 6), (6, 7)]
(3)map函数还可以用来进行类型转换
- 将元组转换为列表
>>> list(map(int, (1, 2, 3)))
返回值:[1, 2, 3]
- 将字符串转换为列表
>>> list(map(int,'1234'))
返回值:[1, 2, 3, 4]
(4)可以提取字典中的key
>>> list(map(int,{'1':2,'2':3,'3':4}))
返回值:[1, 2, 3]
其它
map
map
是一个内置的 Python 函数,用于将一个函数应用到一个可迭代对象(如列表、元组等)的每个元素,并返回包含结果的新可迭代对象。这是 map
函数的基本语法:
map(function, iterable, ...)
function
是要应用于每个元素的函数。iterable
是要迭代的对象,通常是一个列表或元组,但也可以是其他可迭代对象。
map
函数会返回一个 map 对象,你可以将其转换为列表或其他数据类型以查看或进一步处理结果。
以下是一个示例,演示如何使用 map
函数将一个函数应用于列表中的每个元素:
# 定义一个函数,将数字加倍
def double(x):
return x * 2
# 创建一个列表
numbers = [1, 2, 3, 4, 5]
# 使用 map 将 double 函数应用于列表中的每个元素
doubled_numbers = map(double, numbers)
# 将 map 对象转换为列表
doubled_numbers_list = list(doubled_numbers)
# 输出结果
print(doubled_numbers_list) # 输出 [2, 4, 6, 8, 10]
在这个示例中,我们定义了一个函数 double
,它将输入的数字加倍。然后,我们使用 map
函数将 double
函数应用于 numbers
列表中的每个元素,最后将 map
对象转换为一个新的列表 doubled_numbers_list
,其中包含了每个元素经过 double
函数处理后的结果。
你可以根据需要定义不同的函数来应用于 map
函数,以便对可迭代对象中的元素进行各种操作。
filter
filter
是一个内置的 Python 函数,用于过滤可迭代对象(如列表、元组等)中的元素,只保留满足某个条件的元素。以下是 filter
函数的基本语法:
filter(function, iterable)
function
是一个用于过滤元素的函数,该函数接受一个元素作为参数并返回一个布尔值(True
表示保留该元素,False
表示过滤掉该元素)。iterable
是要过滤的可迭代对象,通常是一个列表或元组,但也可以是其他可迭代对象。
filter
函数返回一个 filter 对象,你可以将其转换为列表或其他数据类型以查看或进一步处理结果。
以下是一个示例,演示如何使用 filter
函数过滤一个列表中的元素:
# 定义一个函数,检查元素是否为偶数
def is_even(x):
return x % 2 == 0
# 创建一个列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
# 使用 filter 过滤列表中的偶数
even_numbers = filter(is_even, numbers)
# 将 filter 对象转换为列表
even_numbers_list = list(even_numbers)
# 输出结果
print(even_numbers_list) # 输出 [2, 4, 6, 8]
在这个示例中,我们定义了一个函数 is_even
,它检查一个数字是否为偶数。然后,我们使用 filter
函数将 is_even
函数应用于 numbers
列表中的每个元素,只保留那些返回 True
的元素,最后将 filter
对象转换为一个新的列表 even_numbers_list
,其中包含了所有的偶数。
你可以根据需要定义不同的函数来用于 filter
函数,以便根据不同的条件来过滤可迭代对象中的元素。
reduce
reduce
是 Python 中的一个内置函数,用于对可迭代对象中的元素进行累积操作,从左到右逐个元素地应用指定的函数,最终返回一个累积的结果。
以下是 reduce
函数的基本语法:
functools.reduce(function, iterable[, initializer])
function
是一个接受两个参数的函数,用于指定累积操作。它应该接受当前的累积结果和可迭代对象中的下一个元素,并返回一个新的累积结果。iterable
是要进行累积操作的可迭代对象。initializer
是可选的,如果提供,它将被用作初始的累积值。如果未提供initializer
,则将使用可迭代对象的第一个元素作为初始累积值。
以下是一个示例,演示如何使用 reduce
函数计算一个列表中所有元素的累积乘积:
import functools
# 定义一个函数,用于计算累积乘积
def multiply(x, y):
return x * y
# 创建一个列表
numbers = [1, 2, 3, 4, 5]
# 使用 reduce 计算列表中所有元素的累积乘积
result = functools.reduce(multiply, numbers)
# 输出结果
print(result) # 输出 120 (1 * 2 * 3 * 4 * 5)
在这个示例中,我们首先导入 functools
模块,然后定义了一个函数 multiply
,该函数接受两个参数并返回它们的乘积。接下来,我们使用 reduce
函数将 multiply
函数应用于 numbers
列表中的所有元素,计算它们的累积乘积,最终结果是 120。
reduce
函数在对列表中的元素进行累积操作时非常有用,你可以根据需要定义不同的累积函数来执行各种累积操作。
本文来自博客园,作者:__username,转载请注明原文链接:https://www.cnblogs.com/code3/p/16989017.html