count
J. Clifford Dyer
jcd at sdf.lonestar.org
Wed Jul 8 22:10:47 EDT 2009
On Wed, 2009-07-08 at 14:45 -0700, Paul Rubin wrote:
> aahz at pythoncraft.com (Aahz) writes:
> > >Avoid that len(tuple(g)), use something like the following, it's lazy
> > >and saves some memory.
> > The question is whether it saves time, have you tested it?
>
> len(tuple(xrange(100000000))) ... hmm.
timer.py
--------
from datetime import datetime
def tupler(n):
return len(tuple(xrange(n)))
def summer(n):
return sum(1 for x in xrange(n))
def test_func(f, n):
print f.__name__,
start = datetime.now()
print f(n)
end = datetime.now()
print "Start: %s" % start
print "End: %s" % end
print "Duration: %s" % (end - start,)
if __name__ == '__main__':
test_func(summer, 10000000)
test_func(tupler, 10000000)
test_func(summer, 100000000)
test_func(tupler, 100000000)
$ python timer.py
summer 10000000
Start: 2009-07-08 22:02:13.216689
End: 2009-07-08 22:02:15.855931
Duration: 0:00:02.639242
tupler 10000000
Start: 2009-07-08 22:02:15.856122
End: 2009-07-08 22:02:16.743153
Duration: 0:00:00.887031
summer 100000000
Start: 2009-07-08 22:02:16.743863
End: 2009-07-08 22:02:49.372756
Duration: 0:00:32.628893
Killed
$
Note that "Killed" did not come from anything I did. The tupler just
bombed out when the tuple got too big for it to handle. Tupler was
faster for as large an input as it could handle, as well as for small
inputs (test not shown).
More information about the Python-list
mailing list