Python代码问题:如何让循环生成10个不同随机列表而非重复添加同一列表
问题解决:生成10个不同的随机列表
你的代码之所以会重复添加同一个列表,核心问题有两个:
- 复用了全局的
winner列表对象,每次往results里加的都是同一个列表的引用,所有元素指向的都是同一个内存地址的列表。 - 逻辑顺序颠倒:先把空的
winner加到results,再去填充它,导致第一次添加的是空列表,后续循环里winner已经是满的,不会再生成新内容,所以所有元素都一模一样。
只需要修改dice()方法里的这几处:
修改步骤
- 把
winner的定义移到外层while循环内部,每次循环都新建一个空列表,确保每个待添加的列表都是独立的对象。 - 调换操作顺序:先把当前
winner填充到指定长度,再将它追加到results中。 - (可选但推荐)把
results改成方法内的局部变量,避免全局变量带来的意外;同时避免用list作为变量名,和Python内置类型冲突。
修改后的完整代码
from random import choice # 重命名变量,避免和内置list冲突 my_list = [1, 2, 3, 4, "a", "b", "c", "d"] ticket = [1, 2] class Die: def __init__(self, a_list): self.a_list = a_list def dice(self): results = [] # 改为方法内局部变量 while len(results) < 10: winner = [] # 每次循环新建空列表 # 先填充当前winner到2个元素 while len(winner) < 2: die = choice(self.a_list) winner.append(die) # 填充完成后再添加到results results.append(winner) print(results) my_dice = Die(my_list) my_dice.dice()
这样运行后,results里就会是10个独立的随机列表,每个列表都是从指定集合里随机选2个元素生成的。
内容的提问来源于stack exchange,提问作者Axel Samuelson
相关产品推荐
相关产品推荐

