赞
踩
二维list若用 [[0] * 5] * 5 这样的方式初始化,则指定元素赋值也会造成所有行的该列也被赋值,与预期不符合。
因此建议,全用[[0] * 5 for _ in range(5)] 这样的方式来初始化。
若后面不再修改值的话,两个两种都可以。
或者转换为np.array()也可以避免这种错误。
>>> a = [[0] * 5] * 5
>>> a
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> b = [[0] * 5 for _ in range(5)]
>>> b
[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> a == b
True
>>> a[0][1] = 1
>>> a
[[0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0], [0, 1, 0, 0, 0]]
>>> b[0][1] = 1
>>> b
[[0, 1, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
>>> a = [[0] * 5] * 5
>>> import numpy as np
>>> b = np.array(a)
>>> b
array([[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]])
>>> b[0][1] = 100
>>> b
array([[ 0, 100, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0],
[ 0, 0, 0, 0, 0]])
# 或直接用
b = np.zeros((5,5), dtype=np.int)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。