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)
问题分析
- 变量名混乱:代码里用
raffled接收随机选中的学生,但后续操作却用了未定义的drawn,这会直接引发错误(能运行出空列表大概率是实际代码里变量名写错,比如把raffled写成drawn,但不管怎样变量名必须统一) - 列表引用陷阱:
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
相关产品推荐
相关产品推荐

