首页 > 解决方案 > Python 多维列表初始化 ...或纯 Python 等价于 numpy.zero

问题描述

我需要在“纯”python 中创建一个 2x2x2x2 维列表,即不使用 numpy。

使用 numpy,我会简单地写:

numpy.zeros((2,2,2,2))

在“普通蟒蛇”中,我尝试过:

>>> aa=[[[[0]*2]*2]*2]
>>> aa
[[[[0, 0], [0, 0]], [[0, 0], [0, 0]]]]

看起来不错,但是

>>> aa[0][0][0][0]=1

结果是:

>>> aa
[[[[1, 0], [1, 0]], [[1, 0], [1, 0]]]]

这当然不是我想要的

我一直觉得python中的这个可变对象是一个奇怪的设计选择......无论如何,有没有一种简单的pythonic方法来实现我想要的一个不需要导入的单行。我知道深度复制列表可以解决问题,但感觉远非优雅...... :-)

标签: python

解决方案


试试这个:

>>> aa = [[[0 for _ in range(2)] for _ in range(2)] for _ in range(2)]

>>> aa
[[[0, 0], [0, 0]], [[0, 0], [0, 0]]]

>>> aa[0][0][0] = 1
>>> aa
[[[1, 0], [0, 0]], [[0, 0], [0, 0]]]

推荐阅读