具有条件函数的组合,用于组合 Python 中的每 2 个元素
Combinations with a conditional function for combining every 2 elements in Python
我有一组(最多 40 个)组件 ['c1','c2','c3','c4','c5',...]
和:
- 我需要生成一个包含 r = 2、3 和 4 组合的新数组
- 但某些特定组件永远不能处于同一组合中。
我有一个函数可以 verify_combination(component1,component2)
通过查询数据库 table。如果是禁止组合,它将 return False
。如果我假设禁止组合 (c1,c3) 以及 (c4,c5),最后我会得到这样的结果:
combinations = [(c1,c2),(c1,c4),(c1,c5),(c2,c3),(c2,c4),(c2,c5),(c3,c4),(c3,c5), (c1,c2,c4),(c1,c2,c5),(c2,c3,c4),(c2,c3,c5)]
# (I believe that's right)
# (In this case no valid combinations of r=4 would be produced)
我在 python 和整体编程方面不是很有经验,而且我严重缺乏数学技能来为这种 与条件或条件的组合建模 。在过去的几个小时里,我一直在尝试这样做,试图找到已经在网上编写的类似代码,并且还尝试使用 itertools,但甚至没有接近解决方案。
如果我对问题的理解正确,我可能会从 itertools.combinations 开始,这将 return 输入列表成员的可迭代对象。然后你可以过滤掉非法组合。
from itertools import combinations as combos, chain
from functools import filter
pairs = filter(verify_combination, combos(input_list, 2))
triples = filter(verify_combination, combos(input_list, 3))
quads = filter(verify_combination, combos(input_list, 4))
combined_combos = list(chain(pairs, triples, quads))
我有一组(最多 40 个)组件 ['c1','c2','c3','c4','c5',...]
和:
- 我需要生成一个包含 r = 2、3 和 4 组合的新数组
- 但某些特定组件永远不能处于同一组合中。
我有一个函数可以 verify_combination(component1,component2)
通过查询数据库 table。如果是禁止组合,它将 return False
。如果我假设禁止组合 (c1,c3) 以及 (c4,c5),最后我会得到这样的结果:
combinations = [(c1,c2),(c1,c4),(c1,c5),(c2,c3),(c2,c4),(c2,c5),(c3,c4),(c3,c5), (c1,c2,c4),(c1,c2,c5),(c2,c3,c4),(c2,c3,c5)]
# (I believe that's right)
# (In this case no valid combinations of r=4 would be produced)
我在 python 和整体编程方面不是很有经验,而且我严重缺乏数学技能来为这种 与条件或条件的组合建模 。在过去的几个小时里,我一直在尝试这样做,试图找到已经在网上编写的类似代码,并且还尝试使用 itertools,但甚至没有接近解决方案。
如果我对问题的理解正确,我可能会从 itertools.combinations 开始,这将 return 输入列表成员的可迭代对象。然后你可以过滤掉非法组合。
from itertools import combinations as combos, chain
from functools import filter
pairs = filter(verify_combination, combos(input_list, 2))
triples = filter(verify_combination, combos(input_list, 3))
quads = filter(verify_combination, combos(input_list, 4))
combined_combos = list(chain(pairs, triples, quads))