我想创建一个多维数组并使用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
我想知道是否有更好的方法(没有副本和递归)?
答案 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}}个唯一实例数组。
解决方案仍然是递归的,但我认为递归非常适合这个问题。