当前位置:   article > 正文

python二维游戏编程 超级大脑_python二维list之巨坑

超级大脑编程

二维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)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/111440?site
推荐阅读
相关标签
  

闽ICP备14008679号