在没有循环的情况下迭代参数

时间:2016-04-30 22:24:21

标签: python functional-programming

我需要迭代两个数字列表,这些数字组成了函数的输入。我想以功能的方式做到这一点。目前我正在做:

myfunction()

其中params_list1返回一个数字。我确定有一种方法可以将params_list2myfunction()(可能使用numpy广播?)相乘,并将它们映射到QSerialPort serial_stream; ... serial_stream.setPortName(QString("/dev/tnt0")); bool loc = serial_stream.open(serial_stream.ReadWrite) ... serial_stream.write(buf); ,但我无法想办法。有什么提示吗?

3 个答案:

答案 0 :(得分:4)

您可以使用itertools.product执行此操作,还应考虑使用列表推导或map(如果您需要延迟评估)而不是使用list.append

results = []
for i, j in itertools.product(params_list1, params_list2):
    results.append(myfunction(i, j))

或像这样使用map

result = map(function(i, j)  for i, j in itertools.product(params_list1, params_list2))

您还可以使用Python3.x中的*表达式解压缩参数的列表

result = [myfunction(*item) for item in itertools.product(params_list1, params_list2)]

答案 1 :(得分:1)

numpy解决方案:

import numpy as np

In [261]: a = np.array([0,1,2,3])

In [262]: b = np.array([2,3,4])

In [263]:

In [263]: np.dstack(np.meshgrid(a, b)).reshape(-1, 2)
Out[263]:
array([[0, 2],
       [1, 2],
       [2, 2],
       [3, 2],
       [0, 3],
       [1, 3],
       [2, 3],
       [3, 3],
       [0, 4],
       [1, 4],
       [2, 4],
       [3, 4]])

答案 2 :(得分:-3)

map(myfunction, params_list1,params_list2)