说明
《Python 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gr99123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
itertools.starmap() 是 Python 中 itertools 模块提供的一个函数,用于对可迭代对象中的每个元素执行函数,并返回结果。与内置的 map() 函数类似,但 starmap() 对每个元素作为参数进行解包,传递给指定的函数。itertools.starmap() 可以看作是 map() 函数的一个变种,主要用于处理需要解包参数(元组或列表)的情况。它能够高效地对可迭代对象中的每个元素执行函数,并生成一个迭代器来存储每次函数调用的结果。
语法itertools.starmap(function, iterable)
创建一个迭代器,使用从可迭代对象中获取的参数来计算该函数。当参数对应的形参已从一个单独可迭代对象组合为元组时(数据已被“预组对”)可用此函数代替 map() 。map() 与 starmap() 之间的区别可以类比 function(a,b)
与 function(*c)
的区别。大致相当于:
def starmap(function, iterable):
# 次幂 starmap(pow, [(2,5), (3,2), (10,3)]) --> 32 9 1000
for args in iterable:
yield function(*args)
例如:
import itertools
foo = itertools.starmap(lambda x,y: y/x, [(2,4),(3,9)])
[*foo]
# [2.0, 3.0]
import itertools
# 定义一个简单的函数
def square(x, y):
return x ** y
# 使用 starmap 对每对元组执行 square 函数
data = [(2, 3), (4, 2), (3, 4)]
results = itertools.starmap(square, data)
# 打印结果
print(list(results)) # 输出 [8, 16, 81]
import itertools
data = [(2, 3), (4, 2), (3, 4)]
# 使用 lambda 函数计算每对元组的乘积
results = itertools.starmap(lambda x, y: x * y, data)
# 打印结果
print(list(results)) # 输出 [6, 8, 12]
假设我们有一组元组,每个元组包含多个数值,我们希望计算每个元组中所有数的乘积。
示例数据
data = [(2, 3, 4), (1, 2, 3), (4, 5, 6)]
目标,计算每个元组中所有数的乘积:
[24, 6, 120]
实现代码
import itertools
data = [(2, 3, 4), (1, 2, 3), (4, 5, 6)]
# 使用 itertools.starmap 计算每个元组中所有数的乘积
results = itertools.starmap(lambda *args: functools.reduce(lambda x, y: x * y, args), data)
# 打印结果
print(list(results)) # 输出 [24, 6, 120]
解释:
lambda *args: functools.reduce(lambda x, y: x * y, args)
计算每个元组中所有数的乘积。itertools.starmap()
执行计算:itertools.starmap()
将每个元组解包后作为参数传递给 lambda 函数,并生成一个迭代器 results。输出结果:
[24, 6, 120]
这个实用案例展示了如何使用 itertools.starmap()
对数据进行复杂的计算和转换,特别是在处理需要多个参数的函数时非常有用。
更新时间:2024-07-04 09:32:07 标签:python itertools map