You probably want to use `timeit` module with similar setup: *run.py* from itertools import combinations def combinations_3(ary): l = len(ary) for i in xrange(l-2): for j in xrange(i+1, l-1): for k in xrange(j+1, l): yield (ary[i], ary[j], ary[k]) def _test(generator): for combination in generator: #: To meger time of sequence generation we should ommit IO operations. pass def test_lib(lenght=10000): _test(combinations(list(range(1, lenght)), 3)) def test_self_written(lenght=10000): _test(combinations_3(list(range(1, lenght)))) *test.py* import timeit #: Print title print(' library time self written time') #: Counter of sequence number. for i in list(range(10, 100, 10)): #: Meger execution time for self written combinations implementation. self_written = timeit.Timer( #: Tested expression. 'test_lib({})'.format(i), #: Test setup, here we just import tested function. 'from run import test_self_written as test_lib' ).timeit(1000) #: And here we just set number of testing iterations. lib = timeit.Timer( 'test_lib({})'.format(i), 'from run import test_lib' ).timeit(1000) #: Print output in format "<number of elements>: library time, self written time" print('{:03} elements: {:10.6f} {:10.6f}'.format(i, lib, self_written)) And here is my output: $ python2 test.py library time self written time 010 elements: 0.007060 0.030495 020 elements: 0.058317 0.239376 030 elements: 0.211884 0.817189 040 elements: 0.522477 1.903142 050 elements: 1.047018 3.803112 060 elements: 1.969069 6.590189 070 elements: 2.960615 10.500072 080 elements: 4.468489 15.176092 090 elements: 6.402755 21.669669 $ python3 test.py library time self written time 010 elements: 0.009168 0.038298 020 elements: 0.058049 0.285885 030 elements: 0.208938 1.031432 040 elements: 0.523407 2.450311 050 elements: 1.048463 4.796328 060 elements: 1.828277 7.832434 070 elements: 2.970929 13.067557 080 elements: 4.481792 18.496334 090 elements: 6.353836 26.277946 $ pypy test.py library time self written time 010 elements: 0.011924 0.040272 020 elements: 0.056972 0.046638 030 elements: 0.185858 0.083793 040 elements: 0.456202 0.188640 050 elements: 0.913935 0.338211 060 elements: 1.588666 0.542124 070 elements: 2.537772 0.846942 080 elements: 3.816353 1.232982 090 elements: 5.471375 1.707760 And python versions $ python2 -V && python3 -V && pypy -V Python 2.7.6 Python 3.4.3 [PyPy 2.2.1 with GCC 4.8.2] As you can see, `pypy` is much faster than `cpython` implementation. Actually, if you are using cpython you do not really want to reinvent standard library functions because they are pretty nice optimized by c compiler and you code will be interpreted instead of compiling. In case of pypy you probably want to make some research, because JIT interpreter have a lot of different corner cases.