更好的方法初始化带可变对象的多维数组
我想创建一个多维数组,并用可变对象的副本来初始化它。这是我目前的代码:
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 个回答
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
的数组,里面包含了不同的 C
类的实例。
这个方法还是用到了递归,不过我觉得递归很适合解决这个问题。