Skip to content

Instantly share code, notes, and snippets.

@codeforkjeff
Created December 3, 2012 19:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save codeforkjeff/4197131 to your computer and use it in GitHub Desktop.
Save codeforkjeff/4197131 to your computer and use it in GitHub Desktop.
Comparison of performance of python lists and sets
# Compare the performance of python lists and sets when doing
# intersections.
#
# No real surprises here. Sets are faster than lists, and generating
# sets on-the-fly from lists is slightly slower than using sets to
# begin with.
import timeit
import random
def create_ints(n, beg, end):
ints = []
while len(ints) < n:
r = random.randint(beg, end)
if not r in ints:
ints.append(r)
return ints
list1 = create_ints(10000, 10000, 99999)
list2 = create_ints(1000, 10000, 99999)
set1 = set(list1)
set2 = set(list2)
def intersect_using_lists():
intersect = []
for i in list1:
if i in list2:
intersect.append(i)
return intersect
def intersect_using_comp():
intersect = [i for i in list1 if i in list2]
return intersect
def intersect_using_precreated_sets():
intersect = set1.intersection(set2)
return intersect
def intersect_using_sets():
intersect = set(list1).intersection(set(list2))
return intersect
for fn in [intersect_using_lists,
intersect_using_comp,
intersect_using_precreated_sets,
intersect_using_sets]:
fn_name = fn.__name__
print "Running %s" % (fn_name,)
print timeit.timeit(stmt="%s()" % (fn_name,), setup="from __main__ import %s" % (fn_name,), number=100)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment