所以我有一个python机器人,其中有两个团队,有一个scramble调用,用来对团队进行置乱。这两支队伍各有一张单子,我得把它们打乱。(在你说使用随机洗牌之前,这在这里不起作用)
每个列表都是一个字典列表-每个元素都是一个包含用户信息的dictionary对象。(例如用户昵称、用户类别、用户禁止状态、用户获胜百分比等)
我无法改变这一点-那是我无法控制的。我想出了以下解决方案:
for i in switchingClassList: #switchingClassList is already filled with random classes that will be switched
playerList = []
for j in teamA:
if j['class'][0] == i: #if the user's class matches one in switchingClassList, that user will be part of the scramble
playerList.append(j)
teamA.remove(j)
for j in teamB:
if j['class'][0] == i:
playerList.append(j)
teamB.remove(j)
#there is more after, but that part works
所以这件事起作用了。。。某种程度上。在一个团队中,有5个独特的职业,除了1个以外,其他所有职业都由一个球员承担。最后一节课不是由一名队员参加,而是由每队两名队员参加。在
如果SwitchClassList包含每个类有2个玩家的类,这个东西就会中断。在
我把错误追溯到这一行:
^{pr2}$结果是,如果选择了包含两个玩家的类,这一行会将两个玩家从teamA列表中删除(反过来,还会从teamB列表中删除)。 但是。。。我以为python中list的remove只删除了第一个元素。我误解了功能吗?有什么可能解决这个问题?在
好的-问题似乎是由
teamA
和teamB
列表在上迭代时发生变异而引起的。这很少;—)是个好主意。在嗯?LOL;—)CPython实际上定义了这里发生的事情,但是依赖它并不是一个好主意。在
迭代列表的副本通常是最快的修复方法:
^{pr2}$相关问题 更多 >
编程相关推荐