如何在同一个Python函数内两次迭代列表,追加后仅保留所有偶数
问题解答
你的需求可以实现,你自行尝试的代码运行失败原因如下:
Python中列表是可变对象,当你在函数内部执行fn = list(filter(lambda x: x %2 == 0, fn))时,只是将函数内的局部变量fn指向了新生成的列表对象,并没有修改外部传入的原列表本身,因此外部的lst不会同步更新。
正确修改方案
你只需要将最后一步的赋值改为切片赋值,直接覆盖原列表的所有元素即可,无需使用fn + sn的写法:
def even(fn,sn): for i in sn: if i %2 ==0: fn.append(i) # 切片赋值直接修改原列表内容,不会改变fn的指向 fn[:] = list(filter(lambda x: x %2 == 0, fn))
运行该函数后打印lst即可得到你期望的结果[2,4,6,8,10,12,14,16,18,20]。
其他可选实现(同样满足要求)
你提到的示例2也符合不使用列表相加的要求,逻辑更简洁:
def even(fn, sn): fn.extend(sn) fn[:] = [x for x in fn if x % 2 == 0]
内容的提问来源于stack exchange,提问作者user16836821
相关产品推荐
相关产品推荐

