title: To preallocate or not to preallocate lists in Python
body: <p>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,</p>
  
  <pre><code>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
  </code></pre>
  
  <p>or dynamically create it as I go?</p>
  
  <pre><code>B = []
  for m in M:
      B.append([])
      for f in F:
          B[-1].append(foo(m, f))
  return B
  </code></pre>
  
  <p>Preallocating seems unnecessary and perhaps slower, but dynamically looks obfuscated. In particular, <code>B[-1].append(...)</code> seems illegible.</p>