有条件地使用嵌套的for循环的一部分

戴维·斯蒂尔

我已经广泛搜索了此答案,但似乎找不到答案。因此,这是我第一次在这里发布问题。

我有一个函数,它使用许多参数来执行计算。根据用户输入,我想迭代某些(或全部)参数的可能值。如果我想遍历所有参数,则可以执行以下操作:

for i in range(low1,high1):
    for j in range(low2,high2):
        for k in range(low3,high3):
            for m in range(low4,high4):
                doFunction(i, j, k, m)

如果我只想迭代第一个和第四个参数,则可以这样做:

for i in range(low1,high1):
    for m in range(low4,high4):
        doFunction(i, user_input_j, user_input_k, m)

我的实际代码具有将近15个带有15个不同参数的嵌套for循环-每个参数都是可迭代的(或不可迭代的)。因此,对我来说,使用自己拥有的功能并为参数的每个可迭代或不可迭代的组合编写唯一的for循环块是不可扩展的。如果这样做的话,我将有2 ^ 15个不同的代码块。

我可以做这样的事情:

if use_static_j == True:
    low2  = -999
    high2 = -1000
for i in range(low1,high1):
    for j in range(low2,high2):
        for k in range(low3,high3):
            for m in range(low4,high4):
                j1 = j if use_static_j==False else user_input_j
                doFunction(i, j1, k, m)

我只想知道是否有更好的方法。也许使用filter(),map()或列表理解...(我还没有足够清楚的了解)

缺口

如注释中所建议,您可以构建参数数组,然后使用数组中的每个值调用函数。构建数组的最简单方法是在定义每个参数范围的列表上使用递归。在此代码中,我假设了一个由startstopscale参数组成的元组列表(例如,列表中的第三个元素产生了[3, 2.8, 2.6, 2.4, 2.2])。要使用静态值,可以使用元组(static, static+1, 1)

def build_param_array(ranges):
    r = ranges[0]
    if len(ranges) == 1:
        return [[p * r[2]] for p in range(r[0], r[1], -1 if r[1] < r[0] else 1)]
    res = []
    for p in range(r[0], r[1], -1 if r[1] < r[0] else 1):
        pa = build_param_array(ranges[1:])
        for a in pa:
            res.append([p * r[2]] + a)
    return res

# range = (start, stop, scale)
ranges = [(1, 5, 1),
          (0, 10, .1),
          (15, 10, .2)
          ]

params = build_param_array(ranges)

for p in params:
    doFunction(*p)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何有条件地匹配行的最后一部分?

输入集中时,React Native有条件地呈现视图的一部分

R用可能的替换向量有条件地替换字符串的一部分

在作为对象一部分的每个数组元素上都有条件

仅当该表单组中的另一个特定表单控件具有值时,才根据需要有条件地设置特定表单控件(较大表单组的一部分)

R:根据另一部分排序值有条件地对一列进行排序

将数据插入带有条件的表中的每条记录,但会自动填充其中的一部分....我会尽力解释:-)

如何有条件地更改Rust宏的一小部分?

有条件地对一部分进行身份验证,例如 Windows 身份验证上应用程序的 /secure 以及 OAuth2 上应用程序的其余部分

有条件地从嵌套for循环退出-VBA

我有一个嵌套列表,想使用列表理解提取其中的一部分

如何遍历嵌套列表的一部分?

无法理解 if/for 循环的一部分

跳过循环的一部分

Python过滤带有键值的嵌套字典并打印一部分

if 条件作为 GIT 命令的一部分

使用jq有条件地修改嵌套json

带有 setTimeout 的 .innerHTML 只打印循环中的最后一部分

在棉花糖中使用 `fields.Nested` 只嵌套架构的一部分

Html中有一部分的ReactJs中的条件渲染

使用Aurelia的$ {$ index}进行模板另一部分的循环

使用for循环的实例号作为函数调用名称的一部分

在WHILE循环中使用变量作为列名的一部分

如何使用tkinter停止作为套接字线程一部分的while循环?

使用作为字符串一部分的整数迭代for循环

使用“for 循环”中的 i 作为变量的一部分

如何使用流有条件地终止循环

使用React有条件地停止游戏循环

在C的for标头的第一部分中使用条件代替赋值