To preallocate or not to preallocate lists in Python

徘徊边缘 提交于 2019-12-22 04:30:35

问题


When should and shouldn't I preallocate a list of lists in python? For example, I have a function that takes 2 lists and creates a lists of lists out of it. Quite like, but not exactly, matrix multiplication. Should I preallocate the result,

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

or dynamically create it as I go?

B = []
for m in M:
    B.append([])
    for f in F:
        B[-1].append(foo(m, f))
return B

Preallocating seems unnecessary and perhaps slower, but dynamically looks obfuscated. In particular, B[-1].append(...) seems illegible.


回答1:


Simply create the list using list comprehension:

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

Related to pre-allocation: Pre-allocating a list of None



来源:https://stackoverflow.com/questions/22769666/to-preallocate-or-not-to-preallocate-lists-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!