Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用map()将具有多个变量的函数应用于列表的最干净方法?_Python_Vectorization - Fatal编程技术网

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)))