[英]Variable number of nested for loops in Python
我無法使其正常工作,我們將不勝感激任何幫助。 我想為以下代碼設置可變數量的嵌套 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。 我想在不手動添加更多循環的情況下這樣做。 如果將其制成一個列表會更好,則不必保留變量結構。
我覺得我需要寫一個遞歸的 function 但我無法解決這個問題,任何幫助將不勝感激。
我嘗試導入一個 csv 文件,其中每一行都有一個變量,但無法計算出 for 循環的可變數量。
您需要的是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))
嘗試使用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 = '\n')
writer.writerows(product(ka, kb, kc, kd, ke, La,Lb, tc, Ld, Le)
如您所見 - Python 確實具有處理這種情況的內置工具。 否則,如果 iterttols package 不存在,則執行此類操作的方法是使用函數,然后遞歸調用 - 類似於
def product(*args):
if not args: return []
remainder = product(*args[1:])
result = []
for item in args[0]:
if remainder:
for part in remainder:
row = [item, *part]
result.append(row)
else:
result.append([item,])
return result
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.