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

报错ValueError及Python导师匹配函数逻辑问题求助

问题分析与代码修正

关于 ValueError: Sample larger than population or is negative

你遇到的这个错误通常来自调用 random.sample() 这类函数时,请求的样本数量超过总体数量或为负数。但你提供的 mentors 函数代码里没有这类调用,该错误大概率来自你代码的其他部分。下面重点修正 mentors 函数的问题。

mentors 函数存在的问题

  • 条件判断逻辑颠倒:需求是 10 ≤ X.subject - Y.subject ≤20(即X的分数减去Y的分数在10到20之间),但你的代码写成了 X_mark -10 ≤ Y_mark ≤ X_mark -20,这会导致没有数值能满足条件(因为 X_mark-10 大于 X_mark-20,下限高于上限)。正确条件应为 X_mark -20 ≤ Y_mark ≤ X_mark -10,或直接判断 10 <= x_mark - y_mark <=20。
  • 未定义变量引用:代码中使用了 mentees_mapping 但从未定义,实际你创建的字典是 map,应检查 X 是否在 map 中。
  • 循环范围限制过窄:内层循环只遍历从 i 到末尾的学生,导致每个学生只能成为后续学生的导师,但需求未限制导师必须是列表中靠后的学生,应遍历所有学生。
  • 变量名冲突:map 是Python内置函数,用作变量名会覆盖内置函数,建议改为更清晰的名称如 mentors_map。
  • 文档字符串参数不一致:文档字符串中第一个参数写的是 scores,但函数定义的参数是 scores_dataset,需保持一致。

修正后的代码

def mentors(scores_dataset, subject):
    """
    Get info about mentors

    Arguments: 
        scores_dataset: list of dicts
        subject: string
    Return:
        result: dict
            key: integer (SeqNo)
            value: list of integers (SeqNo)
    """
    mentors_map = {}
    n = len(scores_dataset)
    for i in range(n):
        mentor = scores_dataset[i]
        x_seq = mentor['SeqNo']
        x_mark = mentor[subject]
        for j in range(n):
            mentee = scores_dataset[j]
            y_seq = mentee['SeqNo']
            y_mark = mentee[subject]
            # 满足10 ≤ X分数 - Y分数 ≤20
            if 10 <= x_mark - y_mark <= 20:
                if x_seq not in mentors_map:
                    mentors_map[x_seq] = [y_seq]
                else:
                    mentors_map[x_seq].append(y_seq)
    return mentors_map

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 02:23:19