Numpy is a big improvement here. In Py 2.7 I get this output if I run Steven's benchmark:
2.10364603996 3.68471002579 4.01849389076 7.41974878311 10.4202470779 9.16782712936 3.36137390137 (confirming his results). If I then run the numpy idiom for this: ######################## import random from timeit import Timer import numpy sieve = numpy.array([random.random() < 0.5 for i in range(10**7)], dtype=bool) setup = """from __main__ import sieve from itertools import islice hi = 7*10**6 """ t1 = Timer("(True == sieve[:hi]).sum()", setup) print(min(t1.repeat(number=10))) ########################### I get : 0.344316959381 It likely consumes less space as well, since it doesn't store Python objects in the array. Skip -- http://mail.python.org/mailman/listinfo/python-list