我在想
我有3組設定
例如 大小 [0,1,2,3,4]
顏色 [red, blue , green]
年分 [1991,2000,2014]
我需要地回的跑這幾個設定不同組合進去模型中
但是我又不想用好幾個 for 包起來
有什麼好方法?
你可以使用 Python 的 itertools.product 來優雅地產生三個設定的所有組合,而不用寫多層 for 迴圈。
✅ 範例做法:
from itertools import product sizes = [0, 1, 2, 3, 4] colors = ['red', 'blue', 'green'] years = [1991, 2000, 2014] # 產生所有組合(笛卡爾積) for size, color, year in product(sizes, colors, years): print(f"size={size}, color={color}, year={year}") # 可以把這些參數組合丟進你的模型處理
? 好處:
不需要巢狀 for 迴圈
結構清晰且易於維護
易於替換或擴充參數列表
如果你還有進階需求(如固定某些條件或排除某些組合),也可以加條件篩選。例如:
for size, color, year in product(sizes, colors, years): if size == 0 and year < 2000: continue # 跳過某些特例 ...
你要將這些組合套入什麼樣的模型流程?我可以幫你整合。
如何決定順序?
例如我希望從years 第一個 colors第一個 跑 size 0-4
你可以調整 itertools.product 中參數的順序來決定哪一層是最內層(變動最快)、哪一層是最外層(變動最慢)。
? 你說的需求是:
每組輸入應該先固定 year,再固定 color,最後在這組 year+color 下跑 size=0~4
也就是說:
順序是:year → color → size(最內層)
✅ 寫法如下:
from itertools import product sizes = [0, 1, 2, 3, 4] colors = ['red', 'blue', 'green'] years = [1991, 2000, 2014] # 把 product 的順序寫成外 → 中 → 內 for year, color, size in product(years, colors, sizes): print(f"year={year}, color={color}, size={size}")
這樣輸出會像這樣:
year=1991, color=red, size=0 year=1991, color=red, size=1 ... year=1991, color=blue, size=0 ... year=2014, color=green, size=4
如果你想 改為 color → year → size,就把順序改成:
for color, year, size in product(colors, years, sizes):
留言板
歡迎留下建議與分享!希望一起交流!感恩!