如何直接修改原列表而非其副本?实现移除奇数、对偶数平方功能
解决方案
直接使用切片赋值对原列表做原地修改即可,既不会改变原列表的内存id,还能一次性完成过滤奇数、偶数平方的操作:
def modify_list(l): l[:] = [i**2 for i in l if i % 2 == 0] return l
原理解释
l[:] = 新列表属于原地操作:会直接用右侧新列表的内容覆盖原列表的全部元素,不会创建新的列表对象,因此操作前后原列表的id保持完全一致,满足id(返回值) == id(传入列表)的要求。- 你之前尝试的遍历调用
remove的方案存在两个问题:- 遍历列表的同时删除元素会导致索引错位,部分奇数会被漏删
- 仅实现了移除奇数的逻辑,没有对剩余偶数做平方处理
效果验证
你可以用以下代码测试效果:
test_list = [1, 2, 3, 4, 5, 6] original_id = id(test_list) processed_list = modify_list(test_list) print(processed_list) # 输出:[4, 16, 36] print(id(processed_list) == original_id) # 输出:True
内容的提问来源于stack exchange,提问作者herlock_sholmes
相关产品推荐
相关产品推荐

