[英]All possible combinations in python (with one fixed parameter)?
我有下一種對象:
class Filter():
default_params= ... # i.e. (1, 5)
all_possible_params = [(1, 5), (1, 6), (2, 5), (2, 6)]
然后,我有一個此對象的列表filters = [Filter_1(), Filter_2(),..]
,其中每個過濾器的兩個屬性都有不同的值。
所以,我的問題是,我想要一個返回所有可能的params組合的方法,但是在每個組合中,我只想遍歷其中一個過濾器的all_possible_params
,而其他過濾器則保留其default_params
。
我認為最好通過一個例子來理解。 我想運行下一個代碼:
filters_list = [Filter(), Filter(), Filter()]
res = generate_onefilter_restdefault_combinations(filters_list)
並在“ res”中顯示下一個輸出:
[((1,5),(1,5),(1,5)), ((1,5),(1,5),(1,6)), ((1,5),(1,5),(2,5)), ((1,5),(1,5),(2,6)),
((1,5),(1,6),(1,5)), ((1,5),(2,5),(1,5)), ((1,5),(2,6),(1,5)),
((1,6),(1,5),(1,5)), ((2,5),(1,5),(1,5)), ((2,6),(1,5),(1,5))]
更新(最佳說明):
在那種情況下,我有3個過濾器,每個過濾器各有4個可能的參數,因此,如果我使用itertools.product(*[f.all_possible_params for f in filters_list])
計算所有可能的組合,我將得到64個組合(4 * 4 * 4) 。 我不是在找那個。
我想將第一個過濾器設置為其默認參數,同時將其置於其他兩個過濾器的所有可能組合上( itertools.product(*[f2.allparams()+f3.allparams()]
)。將第二個過濾器設置為其默認參數,並遍歷過濾器1和3的所有組合( itertools.product(*[f1.allparams()+f3.allparams()]
)。最后再次執行相同的操作,但這一次固定過濾器3。最后,消除所有可能的重復項。
我簡化了Filter
使其只是具有屬性的字典,但是鑒於此,這是我的實現:
import itertools
# dummy data
filters = [
{
'default': (1,5),
'all_params': [
(1,5),
(1,6),
(2,5),
(2,6)
]
}, {
'default': (3,6),
'all_params': [
(4,5),
(4,6),
(5,5),
(5,6)
]
}, {
'default': (6,7),
'all_params': [
(9,9),
(9,8),
(7,5),
(7,6)
]
}
]
result_set = []
for idx,f in enumerate(filters):
rest = filters[idx+1:]
all_params_together = [p for r in rest for p in r['all_params']]
for perm in itertools.permutations(all_params_together, len(filters)-1):
result_set.append([f['default']] + list(perm))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.