相关疑难解决方法(0)

254
推荐指数
3
解决办法
22万
查看次数

避免嵌套for循环

我正在尝试使用python对另一个代码进行一些参数测试.我需要测试6个独立的参数,但我需要它们的所有可能组合.

每个参数都有一个最小值,一个最大值和一个需要传递给它的步长值.突然出现在我脑海中的第一个简单的解决方案是嵌套的for循环结构,看起来很可怕,如下所示:

for var1 in xrange(min1,max1,step1):
    for var2 in xrange(min2,max2,step2):
        ...
            ...
                ...
                    for var6 in xrange(min6,max6,step6):
                        '''
                        Do something and be icky in the process due
                        to being in the middle of six nested for loops
                        '''
Run Code Online (Sandbox Code Playgroud)

我决定了,不!这不能成立.所以我一直试图找到一种方法来递归地执行此操作,或者至少,不是嵌套六次.我无法真正想出一个好方案.对我来说最大的障碍是每个变量都有不同的最小值,最大值和步长值.

到目前为止,我的想法并不是很有帮助.我一直在尝试使一些递归函数工作,但是如果没有在函数中嵌套更多的循环,我就无法弄明白.我在这里看到了很多对itertools.product的引用,但我也无法弄清楚如何使这项工作成功.

编辑:我正在做的是创建一个以参数组合命名的目录,使用这些参数编写文件,使用此文件运行另一个代码,以及分析该代码的输出.除了最后一个,我几乎没有在for循环中做任何事情.很多参数只有2个值,有些有10个,有些有3个...它只是有点不同.

python for-loop

26
推荐指数
2
解决办法
1万
查看次数

在python中迭代未知数量的嵌套循环

我有可变数量的用户定义列表,每个列表包含单词.例如,可能有三个列表,如下所示:

list1 = ["THE", "A"]
list2 = ["ELEPHANT", "APPLE", "CAR"]
list3 = ["WALKED", "DROVE", "SAT"]
Run Code Online (Sandbox Code Playgroud)

我想要的是迭代每个列表中的每个组合,根据已知单词的字典检查每个组合,以查看哪个单词分组最像字典.这意味着迭代将是这样的:

[
    "THE ELEPHANT WALKED",
    "THE APPLE WALKED",
    "THE CAR WALKED",
    "THE ELEPHANT DROVE",
    "THE APPLE DROVE",
    "THE CAR DROVE",
    # ...
    "A CAR SAT",
]
Run Code Online (Sandbox Code Playgroud)

问题是可以有任意数量的列表,每个列表可以包含可变数量的项目.我知道递归可以用于此,但我需要一个没有递归的解决方案.我一直存在的问题是,可能存在可变数量的列表,否则我只会写:

for a in list1:
    for b in list2:
        for c in list3:
            ...
Run Code Online (Sandbox Code Playgroud)

但我不知道在哪里停止......

python combinations list

17
推荐指数
1
解决办法
5048
查看次数

在Python中,是否存在嵌套范围的循环形式?

在为大学实现矩阵乘法时,我最终仅使用范围就得到了3次嵌套的for循环。我个人不喜欢嵌套,并问自己Python中是否有某些东西可以“简化”这种特殊情况的语法。

我在互联网上查了一下,但不幸的是我找不到任何东西。

我得到的代码看起来像这样:

for i in range(a):
    for j in range(b):
        for k in range(c):
            # some stuff
Run Code Online (Sandbox Code Playgroud)

随着Python能够返回多个值,我认为应该有一些迭代器使用for循环返回N个嵌套范围的N个索引,例如:

# this should do the exact same thing like the above example
for i, j, k in nrange((a), (b), (c)):
    # some stuff
Run Code Online (Sandbox Code Playgroud)

nrange的每个参数都是一个参数元组,然后使用*运算符传递给range。因此nrange((a1, a2, a3), (b1, b2, b3))也应该是可能的。我的问题是,是否存在?为什么不存在?

先感谢您。:)

python for-loop range

4
推荐指数
1
解决办法
40
查看次数