使用可变对象初始化多维数组的更好方法

时间:2011-08-12 12:35:42

标签: python multidimensional-array

我想创建一个多维数组并使用a的副本对其进行初始化 可变对象。这就是我到目前为止所做的:

import copy

def create_array(dimensions):
    dimensions = copy.deepcopy(dimensions)
    dimensions.reverse()
    a = [0] * dimensions[0]
    del dimensions[0]
    for d in dimensions:
        a = [copy.deepcopy(a) for _ in range(d)]
    return a

def create_array_mutable(dimensions, obj):
    a = create_array(dimensions)
    def set(x):
        if isinstance(x[0], list):
            for e in x:
                set(e)
        else:
            for i in range(len(x)):
                x[i] = copy.deepcopy(obj)
    set(a)
    return a

我想知道是否有更好的方法(没有副本和递归)?

1 个答案:

答案 0 :(得分:2)

怎么样:

import copy

def create_array_mutable(dims, obj):
  if len(dims) == 0:
    return copy.deepcopy(obj)
  else:
    return [create_array_mutable(dims[1:], obj) for i in xrange(dims[0])]

class C(object): pass

print create_array_mutable((2,3,4), C())

这会创建2x3x4的{​​{1}}个唯一实例数组。

解决方案仍然是递归的,但我认为递归非常适合这个问题。