You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python函数中永久将外部列表替换为分组后的新列表

问题原因与修复方案

问题根源

Python的参数传递为对象引用传递,你在函数内部对players执行players = []、players = players_team这类赋值操作时,只是修改了函数内部的局部变量players的指向,没有修改外部传入的原始列表对象本身,因此外部的players列表不会发生变化。

修复方法

方案1:修改原列表对象(无需调整调用逻辑)

直接操作原始列表的内容而非给局部变量重新赋值,将函数最后一行的players = players_team替换为players[:] = players_team,或者先清空原列表再追加分组结果即可。
修改后完整代码:

def group_together(players, team):
    coplayers = list(players)
    players.clear()
    players_team = []
    num_players= len(coplayers)
    no_groups = num_players // team
    if num_players%team > 0:
        no_groups += 1
    c = 0
    for i in range(no_groups):
        players_team.append([])
        for j in range(team):
            if c < num_players:
                players_team[i].append(coplayers[c])
                c+=1
    players.extend(players_team)

players = [456, 218, 67, 1, 101, 199]
group_together(players, 2)#无返回值
print(players)

方案2:函数返回结果后外部赋值(更推荐的写法)

让函数返回分组后的嵌套列表,调用时直接将返回值赋值给外部players变量,这种写法无隐式副作用,可读性更强。
修改后完整代码:

def group_together(players, team):
    coplayers = list(players)
    players_team = []
    num_players= len(coplayers)
    no_groups = num_players // team
    if num_players%team > 0:
        no_groups += 1
    c = 0
    for i in range(no_groups):
        players_team.append([])
        for j in range(team):
            if c < num_players:
                players_team[i].append(coplayers[c])
                c+=1
    return players_team

players = [456, 218, 67, 1, 101, 199]
players = group_together(players, 2)
print(players)

两种方案运行后都可以得到预期输出[[456, 218], [67, 1], [101, 199]]。

内容的提问来源于stack exchange,提问作者Yergia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 22:06:06