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

Python函数无法修改列表问题求助——《Python Crash Course》练习8-10

问题:修改魔术师列表的函数未生效原因及正确实现

我正在完成《Python Crash Course》(第一版)中的练习8-10《Great Magicians》。练习要求基于8-9的代码,编写make_great()函数修改魔术师列表,为每个名字添加"the Great"后缀,并调用show_magicians()验证列表已修改。

作者明确说明:将列表作为函数参数传入会修改原列表,使用list[:]则传递副本避免修改。我按照意图编写了如下代码,但调用make_great()后原magicians列表并未改变,想请教原因。

我已通过临时列表的方法解决,但认为这不符合练习设计意图,希望找到无需临时列表的正确实现方式。

magicians = ["Danton", "Professor", "Fallon", "Tesla"]

def make_great(whocares):
    """making great"""
    for x in whocares:
        x = x + ", the Great"

make_great(magicians)
show_magicians(magicians) # The list magicians remained as it was: Why?

原因分析

你代码里的问题出在循环逻辑上:for x in whocares遍历列表时,x只是原列表元素的临时副本。而且Python的字符串是不可变类型,x = x + ", the Great"其实是创建了一个全新的字符串对象,根本没碰原列表里的元素,所以原列表自然不会变。

无需临时列表的正确实现

要直接修改原列表,得通过索引定位元素并替换,这样操作的是列表本身的位置,不是临时变量:

magicians = ["Danton", "Professor", "Fallon", "Tesla"]

def show_magicians(mags):
    for mag in mags:
        print(mag)

def make_great(whocares):
    """为魔术师添加the Great后缀"""
    for i in range(len(whocares)):
        whocares[i] = whocares[i] + ", the Great"

make_great(magicians)
show_magicians(magicians)

运行这段代码后,原magicians列表会被直接修改,符合练习要求的“修改原列表”的设计意图。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:15:40