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

How to apply some operation to each element of a tuple

我有一个像 (p1, p2) 这样的元组(例如 (5,3) 或 (2,1)) 我想对元组的每个元素 应用相同的操作 。 (顺便说一句,此操作将为每个 元素提供 另一个元组,因此我将有一个元组的元组,但这不是必要条件)

首先我想到了

for element in (3,2):
    res=function(element)

但首先,这似乎不是一个优雅的解决方案,第二,我仍然需要从每个 res 中形成一个元组以获得 (function(3),function(2)) 解决方案

如何将函数(带有多个参数)应用于元组的每个元素一次并获得返回值的元组?

一种方法使用列表理解:

def add_one(x):
    return x + 1

tpl = (5, 3)
output = tuple([add_one(x) for x in tpl])
print(output)  # (6, 4)

如果我理解你的问题是正确的,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))
    

您可以考虑使用生成器理解然后将其转换为元组:

>>> data = (3, 5, 7, 9)
>>> tuple((function(x) for x in data))