To preallocate or not to preallocate lists in Python
13,255
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
Author by
cheezsteak
Updated on June 04, 2022Comments
-
cheezsteak almost 2 years
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. -
SethMMorton about 10 yearsI like this solution, but it doesn't really answer the question "are there advantages to preallocating lists in python?". Obviously in this case the list comprehension is the best method and circumvents the issue, but there are some cases where this isn't true, and in those cases the original question is intriguing.
-
Ashwini Chaudhary about 10 years@SethMMorton I've already answered that before: Pre-allocating a list of None