Python列表推导式生成二维数组修改元素不符合预期的原因是什么
问题根源
该问题由Python中可变对象的引用传递特性导致,具体原因如下:
- 你提前定义的
info = [0,0]是可变的列表对象,后续的列表推导式[[info for col in range(n+1)] for row in range(n+1)]并没有生成新的独立子列表,只是将同一个info对象的引用重复填充到了二维数组的所有位置 - 当你执行
map[1][1][0] = 1时,实际修改的是唯一的info对象本身,所有引用该对象的数组位置都会同步更新数值,因此不会只修改map[1][1]一处,最终结果不符合预期 - 额外提示:不要用
print、map作为变量/函数名,二者都是Python内置函数,覆盖后会影响内置功能的正常使用
修复方案
调整列表推导式写法,每次循环生成新的独立子列表即可:
n = 5 # 需提前定义n的取值 def custom_print(): my_map = [[[0,0] for col in range(n+1)] for row in range(n+1)] my_map[1][1][0] = 1 print(my_map[1][1]) # 输出 [1, 0],符合预期
内容的提问来源于stack exchange,提问作者Thisis
相关产品推荐
相关产品推荐

