在Python中是否预分配列表

15 投票
1 回答
16378 浏览
提问于 2025-04-18 00:43

我什么时候应该或者不应该在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(...) 这一行看起来就很难懂。

1 个回答

20

简单地说,可以用列表推导式来创建列表:

[[foo(m, f) for f in F] for m in M]

关于预分配的内容:预分配一个包含None的列表

撰写回答