Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 由3名成员组成的多元化团队_Python_Permutation - Fatal编程技术网

Python 由3名成员组成的多元化团队

Python 由3名成员组成的多元化团队,python,permutation,Python,Permutation,使用python 我们可以用多少种方式组成一个至少有一个男人和一个女人的三人小组。我们需要找到不同的方法来选择一组3人 def diverseDeputation(m, w): 例如: m=1 w=3 有m=1名男性可用,w=3名女性可用。例如,给它们贴上m1、w1、w2、w3的标签。有三种可能的方式形成一个多样化的群体:(m1,w1,w2),(m1,w1,w3)和(m1,w2,w3)。唯一其他可能的排列是(w1,w2,w3),它不包括人,因此它是无效的。如果你只需要得到数字(而不是组本身),

使用python 我们可以用多少种方式组成一个至少有一个男人和一个女人的三人小组。我们需要找到不同的方法来选择一组3人

def diverseDeputation(m, w):
例如: m=1 w=3
有m=1名男性可用,w=3名女性可用。例如,给它们贴上m1、w1、w2、w3的标签。有三种可能的方式形成一个多样化的群体:(m1,w1,w2),(m1,w1,w3)和(m1,w2,w3)。唯一其他可能的排列是(w1,w2,w3),它不包括人,因此它是无效的。

如果你只需要得到数字(而不是组本身),那更像是一个数学问题,而不是编程。你提到的是排列,但你的例子说明了组合。在置换中(m1,w1,w2)计数不同于(m1,w2,w1)

对于组合:

def diverseDeputation(m, w):
    return m*w*(m+w-2)//2
def diverseDeputation(m,w):
    for im in range(m):
        for iw in range(w):
            for iw3 in range(iw+1,w):
                yield (f"m{im+1}",f"w{iw+1}",f"w{iw3+1}")
            for im3 in range(im+1,m):
                yield (f"m{im+1}",f"w{iw+1}",f"m{im3+1}")

for c in diverseDeputation(1,3): print(c)

('m1', 'w1', 'w2')
('m1', 'w1', 'w3')
('m1', 'w2', 'w3')

for i,c in enumerate(diverseDeputation(4,2),1): print(i,c)

1 ('m1', 'w1', 'w2')
2 ('m1', 'w1', 'm2')
3 ('m1', 'w1', 'm3')
4 ('m1', 'w1', 'm4')
5 ('m1', 'w2', 'm2')
6 ('m1', 'w2', 'm3')
7 ('m1', 'w2', 'm4')
8 ('m2', 'w1', 'w2')
9 ('m2', 'w1', 'm3')
10 ('m2', 'w1', 'm4')
11 ('m2', 'w2', 'm3')
12 ('m2', 'w2', 'm4')
13 ('m3', 'w1', 'w2')
14 ('m3', 'w1', 'm4')
15 ('m3', 'w2', 'm4')
16 ('m4', 'w1', 'w2')
对于排列:

def diverseDeputation(m, w):
    return m*w*(m+w-2)*3
对于实际组合:

def diverseDeputation(m, w):
    return m*w*(m+w-2)//2
def diverseDeputation(m,w):
    for im in range(m):
        for iw in range(w):
            for iw3 in range(iw+1,w):
                yield (f"m{im+1}",f"w{iw+1}",f"w{iw3+1}")
            for im3 in range(im+1,m):
                yield (f"m{im+1}",f"w{iw+1}",f"m{im3+1}")

for c in diverseDeputation(1,3): print(c)

('m1', 'w1', 'w2')
('m1', 'w1', 'w3')
('m1', 'w2', 'w3')

for i,c in enumerate(diverseDeputation(4,2),1): print(i,c)

1 ('m1', 'w1', 'w2')
2 ('m1', 'w1', 'm2')
3 ('m1', 'w1', 'm3')
4 ('m1', 'w1', 'm4')
5 ('m1', 'w2', 'm2')
6 ('m1', 'w2', 'm3')
7 ('m1', 'w2', 'm4')
8 ('m2', 'w1', 'w2')
9 ('m2', 'w1', 'm3')
10 ('m2', 'w1', 'm4')
11 ('m2', 'w2', 'm3')
12 ('m2', 'w2', 'm4')
13 ('m3', 'w1', 'w2')
14 ('m3', 'w1', 'm4')
15 ('m3', 'w2', 'm4')
16 ('m4', 'w1', 'w2')

我相信阿兰的回答是OP要求的。但这是打印所有组合解的代码

from itertools import product, combinations
def diverseDeputation(m, w):
    for n in range(max(3-w,1), min(3,m)):
        for x in product(combinations(range(1,m+1),n), combinations(range(1,w+1),3-n)):
            print(x) #print IDs of men and women

你试过什么了吗?请将您的努力发布到目前为止。我唯一能想到的就是获得所有的组合,我失去了思路。获得所有可能的组合,然后删除最后没有一男一女的组合。这将使代码更简单,但运行时间可能更长。听起来是个好的开始。你将如何得到这些组合?是否允许您使用标准库(例如,
itertools.combinations()
),或者您需要自己编写该部分的代码。您只想计算方法的数量,还是还想枚举方法?