python 高阶函数

map

在Python中,map函数是一个内置的高阶函数,它接受一个函数和一个或多个可迭代对象(如列表、元组等)作为输入,并返回一个迭代器,该迭代器包含了对输入可迭代对象中每个元素应用指定函数后的结果。

map函数的基本语法如下:

map(function, iterable, ...)
  • function:这是一个接受一个或多个参数的函数,map会将其应用于iterable中的每个元素(如果提供了多个可迭代对象,则函数需要接受相应数量的参数,并且map会并行地从每个可迭代对象中取出一个元素作为参数调用函数)。
  • iterable:一个或多个可迭代对象,map会遍历这些对象中的元素。

map函数的一个常见用途是将一个列表中的每个元素都应用一个相同的操作或转换。例如,假设你有一个数字列表,并且你想计算每个数字的平方,你可以这样做:

# 定义一个计算平方的函数
def square(x):
    return x * x

# 原始列表
numbers = [1, 2, 3, 4, 5]

# 使用map函数和square函数来计算每个数字的平方
squared_numbers = map(square, numbers)

# 注意:map返回的是一个迭代器,所以如果你想看到结果,你需要将其转换为列表(或其他可迭代对象)
squared_numbers = list(squared_numbers)

# 打印结果
print(squared_numbers)  # 输出: [1, 4, 9, 16, 25]

另外,由于lambda函数是匿名的,并且通常用于简单的操作,所以它们经常与map一起使用。例如,上面的square函数可以用lambda来替代:

# 使用lambda函数和map来计算每个数字的平方
squared_numbers = map(lambda x: x * x, numbers)

# 同样,map返回的是一个迭代器,所以我们需要将其转换为列表来查看结果
squared_numbers = list(squared_numbers)

# 打印结果
print(squared_numbers)  # 输出: [1, 4, 9, 16, 25]

在使用map函数时,需要注意以下几点:

  1. map返回的是一个迭代器,所以如果你需要多次访问结果,你应该将其转换为列表或其他可迭代对象。
  2. 如果提供的可迭代对象长度不一致(当你有多个可迭代对象作为map的输入时),map会在最短的可迭代对象耗尽时停止。
  3. map函数可以并行地对多个可迭代对象中的元素应用函数(如果函数接受多个参数),但这种情况下,所有可迭代对象必须等长,否则map会在最短的可迭代对象耗尽时停止,并且不会抛出异常。

filter

在Python中,filter函数是另一个内置的高阶函数,它用于根据指定的条件过滤可迭代对象中的元素。filter函数接受一个函数和一个可迭代对象作为输入,并返回一个迭代器,该迭代器包含了所有使指定函数返回True的可迭代对象中的元素。

filter函数的基本语法如下:

filter(function, iterable)
  • function:这是一个接受单个参数的函数,filter会将其应用于iterable中的每个元素,并保留那些使函数返回True的元素。
  • iterable:一个可迭代对象,filter会遍历这个对象中的元素。

filter函数的一个常见用途是从列表中筛选出符合特定条件的元素。例如,假设你有一个数字列表,并且你想筛选出所有的偶数,你可以这样做:

# 定义一个判断是否为偶数的函数
def is_even(x):
    return x % 2 == 0

# 原始列表
numbers = [1, 2, 3, 4, 5, 6]

# 使用filter函数和is_even函数来筛选出偶数
even_numbers = filter(is_even, numbers)

# 注意:filter返回的是一个迭代器,所以如果你想看到结果,你需要将其转换为列表(或其他可迭代对象)
even_numbers = list(even_numbers)

# 打印结果
print(even_numbers)  # 输出: [2, 4, 6]

同样地,由于lambda函数是匿名的,并且通常用于简单的操作,所以它们经常与filter一起使用。例如,上面的is_even函数可以用lambda来替代:

# 使用lambda函数和filter来筛选出偶数
even_numbers = filter(lambda x: x % 2 == 0, numbers)

# 同样,filter返回的是一个迭代器,所以我们需要将其转换为列表来查看结果
even_numbers = list(even_numbers)

# 打印结果
print(even_numbers)  # 输出: [2, 4, 6]

在使用filter函数时,需要注意以下几点:

  1. filter返回的是一个迭代器,所以如果你需要多次访问结果,你应该将其转换为列表或其他可迭代对象。
  2. 如果指定的函数对于可迭代对象中的某个元素返回False(或者等价地,可迭代的项使函数返回任何被视为False的值,如0None''(空字符串), [](空列表), {}(空字典), ()(空元组), 和 set()(空集合)等),则该元素不会被包含在返回的迭代器中。
  3. 如果可迭代对象为空,filter将返回一个空的迭代器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值