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

Python获取两随机采样列表所有符合规则的阵容组合方法

核心问题

你现有代码的逻辑存在3个本质错误,根本无法生成全量符合要求的阵容:

  • 误用random.sample:这个函数的作用是随机抽样,每次调用都会随机选出对应数量的元素,完全不会遍历全量选手。你在循环里反复调用它,每次拿到的都是零散的随机样本,和枚举全组合的需求完全相悖
  • 组合函数用法错误:你每次先凑出一个6人临时列表,再对这个长度为6的列表调用combinations(lst,6),长度为n的列表取n个元素的组合永远只有1种,根本不可能生成多套阵容
  • 循环逻辑无意义:你拿单次随机抽样得到的组合长度当range参数,循环里又重复做随机抽样+生成组合的操作,最后lineup里存的只是若干次随机凑出来的单组阵容,和你要的全量合规结果没有关系
正确实现代码

你的需求是枚举所有「2名10k档选手+4名7k档选手」的6人阵容,不需要随机抽样,直接用组合枚举+笛卡尔积拼接即可,代码如下:

import csv
from itertools import combinations

tenKRange = []
sevenKRange = []
lineup = []

# 读取csv文件,按薪资档位存储选手
with open('combinations.csv', 'r') as file:
    reader = csv.reader(file)
    for row in reader:
        salary = int(row[1])
        if salary >= 10000:
            tenKRange.append(row)
        elif 7000 <= salary < 8000:
            sevenKRange.append(row)

# 分别枚举两类档位的合规人数组合,拼接得到所有满足要求的阵容
for ten_k_pair in combinations(tenKRange, 2):
    for seven_k_quad in combinations(sevenKRange, 4):
        lineup.append(list(ten_k_pair) + list(seven_k_quad))
注意事项

注意:如果两个档位的选手基数较大,全量组合的体量会非常夸张——比如10k档有50人、7k档有100人的时候,总组合数能到48亿级别,全塞进列表里内存会直接溢出。这种场景建议提前加筛选规则(比如选手近期战绩阈值、同队人数限制之类的)边生成边过滤,或者用生成器按需取阵容,不要一次性把所有结果都加载到内存里。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:39:39