如何在Python中创建嵌套列表?

5 投票
5 回答
16023 浏览
提问于 2025-04-15 18:42

我知道在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)) 

使用这个模块,你还可以享受到为科学计算而设计的便利功能。

撰写回答