簡體   English   中英

python中的所有可能組合(帶有一個固定參數)?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM