首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有循环的情况下迭代参数

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

Stack Overflow用户
提问于 2016-04-30 22:24:21
回答 3查看 70关注 0票数 1

我需要迭代两个数字列表,它们构成了函数的输入。我想用一种实用的方式来做这件事。目前我正在做:

代码语言:javascript
复制
results = []
for i in params_list1:
    for j in params_list2:
      results.append(myfunction(i,j))

其中myfunction()返回一个数字。我很确定有一种方法可以使params_list1params_list2相乘(也许使用numpy广播?)并将它们映射到myfunction(),但我无法弄清楚。有小费吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-30 22:30:56

您可以使用itertools.product来完成此操作,还应该考虑使用列表理解或map (如果需要延迟计算),而不是使用list.append

代码语言:javascript
复制
results = []
for i, j in itertools.product(params_list1, params_list2):
    results.append(myfunction(i, j))

或者像这样使用map

代码语言:javascript
复制
result = map(function(i, j)  for i, j in itertools.product(params_list1, params_list2))

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

代码语言:javascript
复制
result = [myfunction(*item) for item in itertools.product(params_list1, params_list2)]
票数 4
EN

Stack Overflow用户

发布于 2016-04-30 22:37:06

矮胖解决方案:

代码语言:javascript
复制
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]])
票数 1
EN

Stack Overflow用户

发布于 2016-04-30 22:32:53

map(myfunction, params_list1,params_list2)

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36960919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档