【问题标题】:Variable number of nested for loops in PythonPython中可变数量的嵌套for循环
【发布时间】:2022-11-18 04:03:06
【问题描述】:

我无法使其正常工作,我们将不胜感激任何帮助。我想为以下代码设置可变数量的嵌套 for 循环。这个想法是将所有可能的组合写入 ​​csv 文件。

这是我的代码: `

ka = [0.217, 0.445]
kb = [0.03, 0.05]
kc = [10]
kd = [0.15625, 0.7]
ke = [1.02, 0.78]
La = [0.15, 0.25]
Lb = [0.025, 0.075]
tc = [0.002, 0.007]
Ld = [0.025, 0.115]
Le = [0.07, 0.2]

NUMBER_OF_VARIABLES = 10

with open('test.csv', 'w') as file:
    writer = csv.writer(file, lineterminator = '\n')
    row = [0] * len(NUMBER_OF_VARIABLES)
    
    
    for E in Le:
        for D in Ld:                                    
            for C in tc:
                for B in Lb:
                    for A in La:
                        for e in ke:
                            for d in kd:
                                for c in kc:
                                    for b in kb:
                                        for a in ka:
                                            row[0] = a
                                            row[1] = b
                                            row[2] = c
                                            row[3] = d
                                            row[4] = e
                                            row[5] = A
                                            row[6] = B
                                            row[7] = C
                                            row[8] = D
                                            row[9] = E
                                            writer.writerow(row)

` 这个想法是我希望能够添加更多或删除变量。每个字母的 k 和 L 是相关的。例如,添加另一个变量将包括 Lf 和 kf。我想在不手动添加更多循环的情况下这样做。如果将其制成一个列表会更好,则不必保留变量结构。

我觉得我需要编写一个递归函数,但我无法解决这个问题,我们将不胜感激任何帮助。

我尝试导入一个 csv 文件,其中每一行都有一个变量,但无法计算出 for 循环的可变数量。

【问题讨论】:

    标签: python csv nested


    【解决方案1】:

    你需要的是itertools.product。它将为您处理所有这些。

    import itertools
    ka = [0.217, 0.445]
    kb = [0.03, 0.05]
    kc = [10]
    kd = [0.15625, 0.7]
    ke = [1.02, 0.78]
    La = [0.15, 0.25]
    Lb = [0.025, 0.075]
    tc = [0.002, 0.007]
    Ld = [0.025, 0.115]
    Le = [0.07, 0.2]
    
    for row in itertools.product(ka,kb,kc,kd,ke,La,Lb,tc,Ld,Le):
        writer.writerow(row)
    

    你甚至可以在一行中做到这一点:

    writer.writerows(itertools.product(ka,kb,kc,kd,ke,La,Lb,tc,Ld,Le))
    

    【讨论】:

    • 谢谢,这确实清理了我的代码。我将如何修改它以对列表列表执行相同的操作。 IE。 vars = [[1, 2], [3,4]...] 其中每个列表代表 ka、kb 等。
    • 您将阅读 itertools.product.... 的文档。将列表转换为位置参数列表的方法是通过 *lst: itertools.product(*lst)
    【解决方案2】:

    尝试使用itertools.product

    ka = [0.217, 0.445]
    kb = [0.03, 0.05]
    kc = [10]
    kd = [0.15625, 0.7]
    ke = [1.02, 0.78]
    La = [0.15, 0.25]
    Lb = [0.025, 0.075]
    tc = [0.002, 0.007]
    Ld = [0.025, 0.115]
    Le = [0.07, 0.2]
    
    from itertools import product
    with open('test.csv', 'w') as file:
        writer = csv.writer(file, lineterminator = '
    ')
        writer.writerows(product(ka, kb, kc, kd, ke, La,Lb, tc, Ld, Le)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-25
      • 2018-06-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-05
      相关资源
      最近更新 更多