Python自定义列表追加函数异常:指定列表却依次追加至两个列表
问题分析与解决办法
嘿,我来帮你捋捋这个问题~你遇到的问题根源出在判断列表的方式上,咱们一步步拆解:
为什么原来的代码不符合预期?
你用了==来判断传入的z是a还是b,但==在Python里是比较两个对象的内容是否相等,而不是判断它们是不是同一个内存对象。
一开始a和b都是空列表,a == b的结果是True——因为空列表的内容完全一致。这时候哪怕你调用func(b, 5),第一个条件z == a也会成立,程序就会往a里追加值,而不是你期望的b。
怎么修改?
我们需要用is关键字来判断,它的作用是检查两个变量是否指向内存中的同一个对象,这才是你真正需要的判断逻辑。修改后的代码如下:
a = [] b = [] def func(z,x): if z is a: a.append(x) elif z is b: b.append(x) print(a,b)
现在你调用func(a, 10),z和a是同一个对象,会往a里加值;调用func(b, 20),z和b是同一个对象,会往b里加值,结果就完全符合预期啦。
更简洁的写法(推荐)
其实还有个更灵活的写法,根本不用判断到底是哪个列表——因为你传入的z本身就是目标列表的引用,直接对z执行append操作就行:
a = [] b = [] def func(z,x): z.append(x) print(a,b)
这个写法的好处是,以后你再加更多列表(比如c = []),完全不用修改函数,直接调用func(c, 30)就能往c里追加值,扩展性更强~
内容的提问来源于stack exchange,提问作者Matt7425
相关产品推荐
相关产品推荐

