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

Python实现从22名球员中选11人并指定队长副队长方案求助

实现从22名球员中生成所有符合要求的11人队伍(含队长副队长)

需求明确

  • 两支初始队伍各含11名球员,总计22人
  • 生成所有可能的11人新队伍组合
  • 对每个11人组合,生成所有队长+副队长的搭配(队长与副队长不能为同一人)
  • 支持从Excel读取球员名单

完整实现代码

依赖准备

如果需要从Excel读取数据,先安装pandas:

pip install pandas

代码示例

import itertools
import pandas as pd

def read_players_from_excel(file_path):
    # 假设Excel文件中有一列名为"Player"存储球员姓名
    df = pd.read_excel(file_path)
    return df["Player"].tolist()

# 方式1:从Excel读取22名球员
# players = read_players_from_excel("players_list.xlsx")

# 方式2:直接定义22名球员(示例数据)
players = [
    "Team1_Player1", "Team1_Player2", "Team1_Player3", "Team1_Player4", "Team1_Player5",
    "Team1_Player6", "Team1_Player7", "Team1_Player8", "Team1_Player9", "Team1_Player10",
    "Team1_Player11", "Team2_Player1", "Team2_Player2", "Team2_Player3", "Team2_Player4",
    "Team2_Player5", "Team2_Player6", "Team2_Player7", "Team2_Player8", "Team2_Player9",
    "Team2_Player10", "Team2_Player11"
]

# 拆分初始两队(如果需要按初始队筛选人数)
team1 = players[:11]
team2 = players[11:]

total_teams = 0

# 遍历所有可能的初始队人数分配(从Team1选0-11人,Team2对应选11-0人)
for pick_from_team1 in range(0, 12):
    pick_from_team2 = 11 - pick_from_team1
    
    # 生成所有Team1选pick_from_team1人的组合
    for t1_members in itertools.combinations(team1, pick_from_team1):
        # 生成所有Team2选pick_from_team2人的组合
        for t2_members in itertools.combinations(team2, pick_from_team2):
            total_teams += 1
            current_team = list(t1_members) + list(t2_members)
            print(f"=== 第 {total_teams} 支队伍(Team1:{pick_from_team1}人 | Team2:{pick_from_team2}人)===")
            
            # 生成所有队长+副队长的搭配(顺序代表职位,队长在前,副队在后)
            for captain, vice_captain in itertools.permutations(current_team, 2):
                # 给队长和副队添加标记
                marked_team = []
                for player in current_team:
                    if player == captain:
                        marked_team.append(f"{player}(c)")
                    elif player == vice_captain:
                        marked_team.append(f"{player}(vc)")
                    else:
                        marked_team.append(player)
                
                # 输出队伍成员
                for member in marked_team:
                    print(member)
                print("---")  # 分隔同一队伍的不同队长副队组合

代码说明

  1. Excel读取:通过read_players_from_excel函数读取Excel中的球员名单,需确保Excel有Player列存储姓名,可根据实际修改列名。
  2. 生成所有队伍组合:
    • 用itertools.combinations生成不重复的球员组合,保证每支队伍的成员唯一。
    • 按初始队人数拆分遍历,覆盖所有“Team1选k人+Team2选11-k人”的情况(k从0到11)。
  3. 队长副队分配:用itertools.permutations(current_team, 2)生成所有可能的队长副队搭配,因为队长和副队是不同职位,顺序不同代表不同的任命结果。
  4. 标记输出:遍历队伍成员,给队长添加(c)标记,副队添加(vc)标记,其余成员正常显示。

注意事项

  • 22人选11人的组合数为C(22,11)=705432,每支队伍又有11*10=110种队长副队搭配,总共有超过7700万种结果,直接输出所有结果会占用大量资源。如果不需要全量结果,可以:
    • 随机生成指定数量的队伍(用random.sample替代itertools.combinations)
    • 添加筛选条件(比如限制初始两队的人数范围)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 15:25:01