Python 使用map()将具有多个变量的函数应用于列表的最干净方法?
我有一个函数,它有多个输入变量。对于一个特定的情况,只有一个输入变量是变化的,是否可以使用映射应用此函数,而不必列出非变化变量 例如:Python 使用map()将具有多个变量的函数应用于列表的最干净方法?,python,vectorization,Python,Vectorization,我有一个函数,它有多个输入变量。对于一个特定的情况,只有一个输入变量是变化的,是否可以使用映射应用此函数,而不必列出非变化变量 例如: # Example multiple variable input function def Example_Function(x,y): return x**2+y**2 # Example List changing variable, x List_of_x = [x for x in range(0,100)] # Non-varying y
# Example multiple variable input function
def Example_Function(x,y):
return x**2+y**2
# Example List changing variable, x
List_of_x = [x for x in range(0,100)]
# Non-varying y
y = 4
# The naive version of the application (doesn't work)
Naive_Result_of_map_application = list(map(Example_Function, List_of_x, [y]))
# The result we want where we have to make a list of y ([y for i in range(0,100)])
Result_of_map_application = list(map(Example_Function, List_of_x, [y for i in range(0,100)]))
那么,有没有一种方法可以在不必执行
[y for i in range(0100)]
的情况下获得应用程序的结果?创建一个已设置y
参数的新函数:
# Example multiple variable input function
def example_function(x, y):
return x ** 2 + y ** 2
# Example List changing variable, x
list_of_x = [x for x in range(0, 100)]
# Non-varying y
y = 4
new_example_function = lambda x : example_function(x, y)
# The result we want where we have to make a list of y ([y for i in range(0,100)])
Result_of_map_application = list(map(new_example_function, list_of_x))
作为替代方案,使其成为可选的,并使用:
我个人会废除map
。如果你不想改变y
,我就不会把它放在一个需要改变数据的上下文中。列表理解在这里很有用:
Result_of_map_application = [Example_Function(x, y) for x in List_of_x]
回答您的问题:
您可以创建一个迭代器,该迭代器将永远生成y
(map
将在另一个迭代器耗尽时停止)。如果在一定次数的重复之后必须停止,则可以将计数作为第二个参数传递,例如itertools.repeat(y,100)
这将使您的代码:
from itertools import repeat # At top of file
Result_of_map_application = list(map(Example_Function, List_of_x, repeat(y)))
也就是说,在这种情况下,我个人推荐更具可读性的listcomp
from itertools import repeat # At top of file
Result_of_map_application = list(map(Example_Function, List_of_x, repeat(y)))