You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Itertools实现双循环赛制对阵并分配唯一比赛编号?

解决双循环赛制对阵生成与唯一编号问题

核心问题分析

combinations生成的是无序二元组,所以(意大利, 英格兰)和(英格兰, 意大利)会被视为同一组,无法满足双循环赛制中主客场各赛一场的要求。要解决这个问题,需要生成有序二元组,同时给每场比赛分配唯一编号。


方法一:使用permutations生成有序对阵

itertools.permutations会生成所有长度为指定值的有序排列,正好对应主客场的不同对阵。搭配enumerate可以直接生成唯一编号:

from itertools import permutations

teams = ["意大利", "英格兰", "法国", "德国"]

# 生成所有主客场对阵,编号从1开始
all_matchups = [
    (home_team, away_team, match_id) 
    for match_id, (home_team, away_team) in enumerate(permutations(teams, 2), start=1)
]

print(all_matchups)

说明:

  • permutations(teams, 2)会生成所有不同的有序二元组,比如("意大利", "英格兰")和("英格兰", "意大利")都会被生成
  • enumerate(..., start=1)自动为每场比赛分配从1开始的连续唯一编号

方法二:手动扩展combinations结果

如果你不想用permutations,可以对combinations生成的每一组无序对阵,手动生成主客场两个方向的比赛,并维护一个计数器来分配编号:

from itertools import combinations

teams = ["意大利", "英格兰", "法国", "德国"]

all_matchups = []
current_id = 1

for team1, team2 in combinations(teams, 2):
    # 添加主客场第一场
    all_matchups.append((team1, team2, current_id))
    current_id += 1
    # 添加主客场第二场
    all_matchups.append((team2, team1, current_id))
    current_id += 1

print(all_matchups)

说明:

  • 这种方式更直观,手动控制每一场比赛的生成逻辑
  • 通过current_id计数器确保编号唯一且连续

内容的提问来源于stack exchange,提问作者ish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 15:52:12