如何对元组的每个元素应用一些操作



我有一个类似(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))

最新更新