Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在python中创建嵌套列表?_Python_List_Arrays_Matrix_Nested Lists - Fatal编程技术网

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

如何在python中创建嵌套列表?,python,list,arrays,matrix,nested-lists,Python,List,Arrays,Matrix,Nested Lists,我知道您可以用python轻松创建嵌套列表,如下所示: [[1,2],[3,4]] 但是如何创建一个3x3x3的零矩阵呢 [[[0] * 3 for i in range(0, 3)] for j in range (0,3)] 或 似乎不对。仅仅将维度列表传递给一个方法就无法创建它?例: CreateArray([3,3,3]) 只需嵌套乘法语法: [[[0] * 3] * 3] * 3 因此,使用 或者,如果您希望避免引用复制,因此更改一个项目不会影响任何其他项目,则应改为使用副本:

我知道您可以用python轻松创建嵌套列表,如下所示:

[[1,2],[3,4]]
但是如何创建一个3x3x3的零矩阵呢

[[[0] * 3 for i in range(0, 3)] for j in range (0,3)]

似乎不对。仅仅将维度列表传递给一个方法就无法创建它?例:

CreateArray([3,3,3])

只需嵌套乘法语法:

[[[0] * 3] * 3] * 3
因此,使用

或者,如果您希望避免引用复制,因此更改一个项目不会影响任何其他项目,则应改为使用副本:

import copy
def zeros(dimensions):
    item = 0
    for dimension in dimensions:
        item = map(copy.copy, [item] * dimension)
   return item

NumPy解决了这个问题


如果一个矩阵实际上是你正在寻找的,考虑NUMPY包。

这将为您提供一个3x3x3的零数组:

numpy.zeros((3,3,3)) 

您还可以从为科学计算而构建的模块的便利功能中获益。

列表理解只是为列表初始化添加表达能力的语法糖;在您的情况下,我根本不会使用它们,而是使用一个简单的嵌套循环

在一个完全不同的层面上:你认为NumPy是一个更好的方法吗?

尽管您可以使用列表来实现多维矩阵,但我认为它们不是实现该目标的最佳工具。

或者使用定义的嵌套函数,并结合itertools模块中的repeat(0):

nest(itertools.repeat(0),[3,3,3])

哈,我发誓我打字的时候元组就在那里。。。谢谢你,杰德!
>>> a = array( [2,3,4] )
>>> a
array([2, 3, 4])
>>> type(a)
<type 'numpy.ndarray'>
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
numpy.zeros((3,3,3)) 
nest(itertools.repeat(0),[3,3,3])