如何在Python中创建嵌套列表?
我知道在Python中可以很简单地创建嵌套列表,比如这样:
[[1,2],[3,4]]
但是,怎么才能创建一个3x3x3的零矩阵呢?
[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]
或者
[[[0]*3]*3]*3
这样似乎不太对。难道就没有办法通过传递一个维度列表给某个方法来创建它吗?比如:
CreateArray([3,3,3])
5 个回答
1
NumPy 解决了这个问题
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
但是如果你想用 Python 自带的列表来当作矩阵,下面这些辅助方法会很有用:
import copy
def Create(dimensions, item):
for dimension in dimensions:
item = map(copy.copy, [item] * dimension)
return item
def Get(matrix, position):
for index in position:
matrix = matrix[index]
return matrix
def Set(matrix, position, value):
for index in position[:-1]:
matrix = matrix[index]
matrix[position[-1]] = value
1
列表推导式其实就是一种让你在创建列表时更方便、更简洁的写法;在你的情况中,我觉得根本不需要用它,直接用简单的嵌套循环就可以了。
另外一个层面上:你觉得NumPy的n维数组会是更好的选择吗?
虽然你可以用列表来实现多维矩阵,但我觉得它们并不是实现这个目标的最佳工具。
9
如果你确实在寻找一个矩阵,可以考虑使用numpy这个包。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.zeros.html#numpy.zeros
这个方法可以给你一个3x3x3的全零数组:
numpy.zeros((3,3,3))
使用这个模块,你还可以享受到为科学计算而设计的便利功能。