与条件函数的组合,用于组合Python中的每2个元素

2024-09-28 20:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个(最多40个)组件的数组['c1','c2','c3','c4','c5',...],并且:

  • 我需要生成一个包含r=2、3和4的组合的新数组
  • 但某些特定的组件永远不能处于同一个组合中

我有一个函数,可以通过查询数据库表verify_combination(component1,component2)。如果是禁止的组合,它将返回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和编程不是很有经验,而且我严重缺乏用标准或条件对这种组合建模的数学技能。在过去的几个小时里,我一直在尝试这样做,试图找到已经在web上编写的类似这样的代码,还尝试使用itertools,但甚至不接近解决方案


Tags: 函数false组件数组verifyc2c1c3
1条回答
网友
1楼 · 发布于 2024-09-28 20:20:47

如果我理解正确,我可能会从itertools.combines开始,它将返回输入列表成员的iterable。然后你可以过滤掉非法的组合

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))

相关问题 更多 >