我有一个动态的元组列表,因此元组可以根据输入增长到任意大小。元组包含一个团队中所有球员的姓名,最后一个条目表示该球队的价值。因此,我想选择两支球队,以便两支球队都有不同的球员,并且类似地,我想从给定列表中生成所有可能的比赛。
例如,这是我的元组列表,其中每个团队都有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)
每个团队中的球员人数也可以增长到任意数量。我正在努力寻找一种有效的方法来生成所有可能的匹配。
不知道这是否是最有效的方法,但是:
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]))
此代码生成此列表中两个元素的所有可能组合(因此,所有可能的匹配),并且仅保留第一队中没有一个球员在第二个中的球员的那些组合。