我有一个类似(p1, p2)
的元组(例如(5,3(或(2,1((我想将相同的操作应用于元组的每个元素。(顺便说一句,这个操作将为每个元素提供另一个元组,所以我将有一个元组的元组,但这不是必要的条件(
首先我想到了类似的东西
for element in (3,2):
res=function(element)
但首先,这似乎不是一个优雅的解决方案,其次,我仍然需要从每个res
形成一个元组来获得(function(3),function(2))
解决方案
如何将一个函数(带有多个参数(应用于元组的每个元素一次,并获得一个返回值的元组?
如果我正确理解你的问题,map
也应该胜任这份工作:
tuple(map(func, tpl))
其中func
是您定义的单参数函数。
现在,如果您有一个带有多个参数的函数,您希望将其应用于每个元素,例如:
def func(x, y, z): return x*y+z
我假设2个元素(假设y和z(是固定的,而x将由元组中的值决定。在我看来有两种方法:
要么用2个固定参数和
map
:定义一个新函数def func1(x): return func(x, 3, 2) tuple(map(func1, tpl))
或者映射如下(我认为它不那么优雅,但这可能是品味的问题(:
tuple(map(lambda x: func(x, 3, 2), tpl))
一种方法使用列表理解:
def add_one(x):
return x + 1
tpl = (5, 3)
output = tuple([add_one(x) for x in tpl])
print(output) # (6, 4)
您可以考虑使用生成器理解,然后将其转换为元组:
>>> data = (3, 5, 7, 9)
>>> tuple((function(x) for x in data))