List comprehension timing difference.

Bart Kastermans bkasterm at
Fri Sep 2 02:35:10 CEST 2011

In the following code I create the graph with vertices
sgb-words.txt (the file of 5 letter words from the
stanford graphbase), and an edge if two words differ 
by one letter.  The two methods I wrote seem to me to 
likely perform the same computations, the list comprehension 
is faster though (281 seconds VS 305 seconds on my dell mini).

Is the right interpretation of this timing difference
that the comprehension is performed in the lower level
C code?

As this time I have no other conjecture about the cause.

import time
import copy

data = map (lambda x: x.strip(), open('sgb-words.txt').readlines())

def d (w1, w2):
    count = 0
    for idx in range(0,5):
        if w1[idx] != w2[idx]:
            count += 1
    return count

print "creating graph"
t0 = time.clock ()
graph = [[a,b] for a in data for b in data if d(a,b) ==1 and a < b]
t1 = time.clock ()
print "took " + str (t1 - t0) + " seconds."

t0 = time.clock ()
graph2 = []
for i in range (0, len(data)):
    for j in range(0,len(data)):
        if d(data[i],data[j]) == 1 and i < j:
            graph2.append ([i,j])
t1 = time.clock ()
print "took " + str (t1 - t0) + " seconds."

More information about the Python-list mailing list