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

Python抽签分组代码运行后返回空列表问题求助

学生列表随机分组问题解决

问题说明

要实现学生列表随机分组:随机抽取学生,每2个组成子列表存入结果列表,但运行代码后返回[[],[],[]],之前还碰到过数据重复、首次数据丢失的问题。

原代码

import random

students = ['Talles','Emanuel','TheusDido','Bianca','Ivan','Jão']
sorteds = []
raffled = ''
double = []
i = 0

while len(students) != 0:
    raffled = random.choice(students)
    students.remove(drawn)
    duo.append(drawn)
    i += 1
 
    if(i == 2):
        sorteds.append(double)
        i = 0
        double.clear()
print(sorteds)

问题分析

  1. 变量名混乱:代码里用raffled接收随机选中的学生,但后续操作却用了未定义的drawn,这会直接引发错误(能运行出空列表大概率是实际代码里变量名写错,比如把raffled写成drawn,但不管怎样变量名必须统一)
  2. 列表引用陷阱:sorteds.append(double)存的是double列表的引用,之后调用double.clear()会清空这个对象,导致结果列表里所有子列表都变成空的——因为它们指向同一个内存地址的列表。

修正后的代码

import random

students = ['Talles','Emanuel','TheusDido','Bianca','Ivan','Jão']
sorteds = []
current_duo = []
count = 0

while students:
    # 随机选一个学生并从原列表移除
    selected = random.choice(students)
    students.remove(selected)
    current_duo.append(selected)
    count += 1
 
    # 凑够2个就存入结果
    if count == 2:
        # 存入当前分组的副本,避免后续修改影响结果
        sorteds.append(current_duo.copy())
        # 重置计数器和当前分组容器
        count = 0
        current_duo = []

# 处理学生数量为奇数的情况(可选)
if current_duo:
    sorteds.append(current_duo)

print(sorteds)

修正要点

  • 统一变量名,避免未定义错误
  • 用current_duo.copy()存入结果,或者直接新建current_duo = [],确保每个子列表都是独立对象,不会被后续清空操作影响
  • 简化循环条件while students:,比判断长度更直观
  • 增加奇数学生数的处理逻辑,避免最后一个学生被遗漏

内容的提问来源于stack exchange,提问作者Emanuel Borges Albano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 12:31:01