问题是: 设9个不同的对象,找出将其分成2组、3组和4组的所有方法。在
从数学上讲,除法的总数可以表示为9!/2个!三!4个!在
这是我尝试过的
import itertools
def multiCoef(seta, n1, n2):
seta = set(seta)
for comba in itertools.combinations(seta, n1):
comba = set(comba)
for combb in itertools.combinations(seta-comba, n2):
combb = set(combb)
yield comba, combb, seta-comba-combb
你可以试试这样的东西,它运行得很好:
^{pr2}$但一旦群组数量增加,这种方法就变得麻烦了。有更好的方法吗?在
请参见itertools。在
http://docs.python.org/library/itertools.html
一旦您定义了函数子集(a,b),用于枚举a中所有大小为b的子集
要找到在
m,n,p
组中划分(m+n+p)
项的方法的数目,首先将集合分成m
组,然后将这些组中的每一组除以n
,然后再除以p
。在把(m+n+p)项分成(n+p)组的方法是
==>;(n+m+n)Cn+p
==>;(m+n+p)!/(m!*(n+p)!)在
把(n+p)项分成n组的方法是
==>;(n+p)Cn
==>;(n+p)!/(n!*(p) !)在
所以(n+m+n)Cm*(n+p)Cn=(m+n+p)!/(m!*(n+p)!)*(n+p)!/(n!*(p) !)在
==>;(m+n+p)!/(m!*n!*p!)在
要进行组合,我们可以使用itertools.combinations
给定m=4,n=3,p=2
将小组分成(n+p)=5个项目
注意:你可以把它当作一个生成器。在
将这些组分成n个项目的子组=3个项目
^{pr2}$注意:tuple(set(g)-set(x))将提供元素not is x,即组的另一部分
组的大小是
现在验证
相关问题 更多 >
编程相关推荐