使用带有两个参数的 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))
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))