looping versus comprehension

Chris Angelico rosuav at gmail.com
Wed Jan 30 10:49:31 EST 2013


On Thu, Jan 31, 2013 at 1:58 AM, Robin Becker <robin at reportlab.com> wrote:
> however, when I tried an experiment in python 2.7 using the script below I
> find that the looping algorithms perform better. A naive loop using list +=
> list would appear to be an O(n**2) operation, but python seems to be doing
> better than that. Also why does the append version fail so dismally. Is my
> test coded wrongly or is pre-allocation of the list making this better than
> expected?

First off, are you aware that your first three blocks of code and your
last four produce different results? The first ones flatten the list,
the others simply convert tuples to lists. With n = 3:

>>> points = []
>>> for xy in row:
    points += [xy[0],xy[1]]
>>> points
[0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6]
>>> map(list,row)
[[0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]

Once that's sorted out, then timings can be played with. But it's
worth noting that list appending is not going to be O(N*N), because
it's going to allow room for expansion.

ChrisA



More information about the Python-list mailing list