Python List remove()删除多个元素

2024-09-28 19:32:31 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我有一个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只删除了第一个元素。我误解了功能吗?有什么可能解决这个问题?在


Tags: 用户in列表forifthat玩家团队
1条回答
网友
1楼 · 发布于 2024-09-28 19:32:31

好的-问题似乎是由teamAteamB列表在上迭代时发生变异而引起的。这很少;—)是个好主意。在

>>> alist = range(10)
>>> alist
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for i, x in enumerate(alist):
...     if i < 5:
...         alist.remove(x)
...
>>> alist
[1, 3, 5, 7, 9]

嗯?LOL;—)CPython实际上定义了这里发生的事情,但是依赖它并不是一个好主意。在

迭代列表的副本通常是最快的修复方法:

^{pr2}$

相关问题 更多 >