我需要迭代两个数字列表,这些数字组成了函数的输入。我想以功能的方式做到这一点。目前我正在做:
myfunction()
其中params_list1
返回一个数字。我确定有一种方法可以将params_list2
和myfunction()
(可能使用numpy广播?)相乘,并将它们映射到QSerialPort serial_stream;
...
serial_stream.setPortName(QString("/dev/tnt0"));
bool loc = serial_stream.open(serial_stream.ReadWrite)
...
serial_stream.write(buf);
,但我无法想办法。有什么提示吗?
答案 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)