在Python中是否预分配列表
我什么时候应该或者不应该在Python中预先分配一个列表的列表呢?
举个例子,我有一个函数,它接收两个列表,然后把它们组合成一个列表的列表。这个过程有点像矩阵乘法,但又不完全一样。我应该预先分配结果,
X = Len(M)
Y = Len(F)
B = [[None for y in range(Y)] for x in range(X)]
for x in range(X):
for y in range(Y):
B[x][y] = foo(M[x], F[y])
return B
还是在运行过程中动态创建它呢?
B = []
for m in M:
B.append([])
for f in F:
B[-1].append(foo(m, f))
return B
预先分配看起来似乎没必要,可能还会更慢,但动态创建又让人觉得不太清晰。特别是,B[-1].append(...)
这一行看起来就很难懂。