列出每个排名有一个元素的所有 5 支球队的集合

问题描述 投票:0回答:1

这将用于公平排名的团队选择(每个团队必须恰好拥有每个排名的一个元素)。 elegibe 玩家的一个例子是:

Rank 1:'Liam', 'Emma', 'Noah', 'Olivia', 'Ava'
Rank 2:'Ethan', 'Sophia', 'Isabella', 'Jackson', 'Mia'
Rank 3:'Aiden', 'Amelia', 'Lucas', 'Harper', 'Mason'
Rank 4:'Ella', 'Logan', 'Grace', 'James', 'Lily'
Rank 5:'Benjamin', 'Chloe', 'Jacob', 'Scarlett', 'Michael'

团队的众多示例之一是:

Team 1: 'Liam','Ethan','Aiden','Ella','Benjamin'
Team 2: 'Emma','Sophia','Amelia','Logan','Chloe'
Team 3: 'Noah','Isabella','Lucas','Grace','Jacob'
Team 4: 'Olivia','Jackson','Harper','James','Scarlett'
Team 5: 'Ava','Mia','Mason','Lily','Michael'

如何生成所有可能的团队组?

我尝试使用Python,但只能获得一组团队,而不是所有可能的组。

set combinations permutation arrange-act-assert
1个回答
0
投票

此代码生成所有 207,360,000 种不同的团队组合。 我们的想法是,我们将排名 1 的人固定为团队的“领导者”,然后对于每个其他排名,我们考虑该排名人员的所有排列,并根据排列将他们分配到团队。

import itertools

def teams(ranks):
    choices = [[ranks[0]]]
    for r in ranks[1:]:
        choices.append(list(itertools.permutations(r)))

    for p in itertools.product(*choices):
        yield list(zip(*p))

ranks = [
    ['Liam', 'Emma', 'Noah', 'Olivia', 'Ava',],
    ['Ethan', 'Sophia', 'Isabella', 'Jackson', 'Mia',],
    ['Aiden', 'Amelia', 'Lucas', 'Harper', 'Mason'],
    ['Ella', 'Logan', 'Grace', 'James', 'Lily'],
    ['Benjamin', 'Chloe', 'Jacob', 'Scarlett', 'Michael'],
]

for ts in teams(ranks):
    for i, t in enumerate(ts):
        print('team %d: %s' % (i, ' '.join(['%-8s' % x for x in t])))
    print()
© www.soinside.com 2019 - 2024. All rights reserved.