我有一个带两个参数的函数。我希望为输入的每个可能组合运行该函数,并存储每个返回的值。例如:
def foo(a, b):
return (a + b)
if __name__ == "__main__":
a = np.array([1., 2., 3.])
b = np.array([5., 6.])
f1 = foo(a[0], b[0]) #6
f2 = foo(a[0], b[1]) #7
f3 = foo(a[1], b[0]) #etc
f4 = foo(a[1], b[1])
f5 = foo(a[2], b[0])
f6 = foo(a[2], b[1])
如何以更优雅的方式调用f1到f6,比如循环?它不能是直接循环,因为a和b具有不同数量的元素。
答案 0 :(得分:3)
itertools.product
是以Pythonic方式进行的方式。但是,如果您正在寻找更原始,更基本的方法,那么您需要两个for循环,这是交叉产品的基本属性。
for i in a:
for j in b:
foo(i, j)
修改强>
itertools.product
的示例用法:
for i, j in itertools.product(a, b):
foo(i, j)
for tup in itertools.product(a, b):
foo(*tup)
我更喜欢第一个,因为如果需要,可以显式使用元组元素。