首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >传递值的组合作为函数的参数

传递值的组合作为函数的参数
EN

Stack Overflow用户
提问于 2021-03-07 20:10:53
回答 2查看 86关注 0票数 0

我想将参数传递为a,b,c,d值的组合。

代码语言:javascript
复制
a = [1,2,3,4,5,6,7,8,9]
b = [5,6,7,8,9,10,11,12,13,14,15]
c = [1,2,3,4,6,12,18]
d = [1,2,3,4,6,12,18,24]
results = []

这是我的玩法:

代码语言:javascript
复制
def calc(a,b,c,d):
 ....

我要它运行calc(1,5,1,1)然后运行calc(1,5,1,2) . calc(1,5,1,24) calc(1,5,2,1) calc(1,5,2,24) calc(1,6,1,1) calc(1,6,18,24) calc(2,5,1,1) calc(2,5,1,24) ..。直到calc(9,15,18,24)

我希望将a、b、c和d的所有可能组合作为参数传递给函数。

我是通过使用嵌套循环实现的。

代码语言:javascript
复制
for i in a:
    for j in b:
        for k in c:
             for l in d:
                 results.append(calc(i,j,k,l))

但我认为这不是最好的解决办法

运行15分钟,因为我使用的数据集太大了

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-03-07 20:17:00

如果需要计算所有内容,运行时就不会真正改变--但这将取决于您的calc函数以及您的输入中是否有重复(这将允许您使用动态编程和缓存查找您的函数)。

为了简化迭代,you can use itertools.product

输入可迭代的

笛卡儿积

大致相当于生成器表达式中嵌套的for-循环。例如,乘积(A,B)返回与((x,y)在A中表示y在B中)相同的结果。

因此,要迭代所有这些列表的乘积:

代码语言:javascript
复制
import itertools

for a_i, b_i, c_i, d_i in itertools.product(a, b, c, d):
    calc(a_i, b_i, c_i, d_i)

但是,请注意,这可能不是您在示例中提到的完全相同的迭代模式,但它仍然会迭代列表中的每一个可能的组合。

票数 0
EN

Stack Overflow用户

发布于 2021-03-07 20:15:30

要稍微缓和一下复杂性,可以使用itertools.product

itertools.product(*iterables, repeat=1)

输入迭代的笛卡儿积。

大致相当于生成器表达式中嵌套的for-循环。例如,product(A, B)返回与(x,y) for x in A for y in B)相同的内容。

代码语言:javascript
复制
import itertools

p = itertools.product(a, b, c, d)

for value_a, value_b, value_c, value_d in p:
    result = calc(value_a, value_b, value_c, value_d)

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

https://stackoverflow.com/questions/66520928

复制
相关文章

相似问题

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