Python列表嵌套赋值错误排查:为玩家分配卡牌失败问题
问题原因与修复方案
问题根源
你通过player = [players_card for i in range(num_players)]生成的列表,所有元素都指向同一个players_card空列表对象,并非每个元素都是独立的新列表。因此,当你对任意player[i]执行添加卡牌操作时,本质是在修改同一个底层列表,导致所有player的内容同步累加。
比如你看到的输出:
0 [6]、1 [6,10]
实际过程是:第一次给player[0]添加6时,共享列表变为[6],所有player都显示这个内容;第二次给player[1]添加10时,共享列表变为[6,10],所有player的内容也随之更新。之前测试player[0]看似正常,只是因为还未操作其他player,但本质上仍共享同一个列表。
修复方案
修改列表推导式,为每个玩家创建独立的空列表:
player = [[] for i in range(num_players)]
这样每个player[i]都是独立的列表,后续给每个玩家添加卡牌时,只会修改对应的列表,不会影响其他玩家的卡牌集合。
如果你的players_card并非空列表,需要保留初始内容,可以通过创建副本实现独立:
player = [players_card.copy() for i in range(num_players)]
内容的提问来源于stack exchange,提问作者Lalo Fuentes
相关产品推荐
相关产品推荐

