在Python中,是否应该预分配列表?

14

我何时应该以及何时不应该在python中预分配一个列表的列表? 例如,我有一个函数,它接受2个列表并将其创建为列表的列表。 就像矩阵乘法一样。我应该预先分配结果吗?

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(...) 看起来很晦涩。


你的意思不是:B = [[None for y in range(Y)] for x in range(X)] 吗? - batbrat
是的,我忘了当我意识到我把y和x弄反了。 - cheezsteak
1个回答

19

14
我喜欢这个解决方案,但它并没有真正回答问题“在Python中预分配列表有什么优势?”显然,在这种情况下,列表推导式是最好的方法,并且规避了这个问题,但在某些情况下这种方法不一定适用,在那些情况下,原始问题更为有趣。 - SethMMorton
4
我之前已经回答过这个问题了:预先分配一个由None组成的列表 - Ashwini Chaudhary

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接