使用带有两个参数的 map(),其中一个参数是列表,另一个是整数

Using map() with two arguments where one argument is a list and the other an integer

def change_salary(data: list, amt: int) -> list:
    new_data = data[:]
    new_data[1] += amt
    return new_data
    
def change_salaries(employees: list, amt: int) -> list:    
    return list(map(change_salary, employees, [amt]*amt))

employees = [
    ["Person1", 2000000],
    ["Person2", 2500000]
]

happier_employees = change_salaries(employees, 100000)

我有以下示例代码,我想为列表中的所有员工添加相同的工资增长。我正在尝试确定是否可以将 map() 与一个列表和一个包含整数的变量一起使用,以产生与在我的 change_salaries 函数中使用列表理解相同的输出:

return [change_salary(employee, amt) for employee in employees]

目前,为了让 map 正常工作,我必须通过创建金额列表 amt 来捏造它,以便它与员工的列表长度相匹配。这不可能是正确的;这当然是一个非常丑陋的解决方案。

我曾希望我能做到:

return list(map(change_salary, employees, amt))

其中 employees 映射到 employees 参数,amt 映射到 change_salaries 函数中的 amt 参数。

我尝试用地图做的事情是否可行?如果可行,代码应该是什么?

我在发布这个问题之前浏览了建议的帖子 - 我找不到匹配的问题 - 可能是因为我没有使用正确的术语?

您可以使用柯里化,例如 partial from functools:

from functools import partial

def change_salaries(employees: list, amt: int) -> list:
    return list(map(partial(change_salary, amt=amt), employees))