使用条件生成所有可能的组合

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

我有一个动态的元组列表,因此元组可以根据输入增长到任意大小。元组包含一个团队中所有球员的姓名,最后一个条目表示该球队的价值。因此,我想选择两支球队,以便两支球队都有不同的球员,并且类似地,我想从给定列表中生成所有可能的比赛。

例如,这是我的元组列表,其中每个团队都有2名球员:

[('bill', 'adam', 87.5), ('bill', 'sam', 86.0), ('bill', 'pj', 52.5), ('adam', 'sam', 88.5), ('adam', 'pj', 55.0), ('sam', 'pj', 53.5)]

现在,我想在这些团队之间生成所有可能的比赛,以使两个团队不能拥有相同的球员。

所以可能有3个匹配项:

bill,sam(86) vs adam,pj(55)
bill,adam(87.5) vs sam,pj(53.5)
bill,pj(52.5) vs adam,sam(88.5)

每个团队中的球员人数也可以增长到任意数量。我正在努力寻找一种有效的方法来生成所有可能的匹配。

python-3.x combinations itertools
1个回答
0
投票

不知道这是否是最有效的方法,但是:

import itertools
teams = [('bill', 'adam', 87.5), ('bill', 'sam', 86.0), ('bill', 'pj', 52.5), ('adam', 'sam', 88.5), ('adam', 'pj', 55.0), ('sam', 'pj', 53.5)]
matches = list(match for match in itertools.combinations(t, 2) if (match[0][0] not in match[1] and match[0][1] not in match[1]))

此代码生成此列表中两个元素的所有可能组合(因此,所有可能的匹配),并且仅保留第一队中没有一个球员在第二个中的球员的那些组合。

© www.soinside.com 2019 - 2024. All rights reserved.