Re: Which is faster?
- From: Steven D'Aprano <steve@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: 30 Aug 2008 06:15:30 GMT
On Fri, 29 Aug 2008 21:26:35 -0700, cnb wrote:
def averageGrade(self):
tot = 0
for review in self.reviews:
tot += review.grade
return tot / len(self.reviews)
def av_grade(self):
return sum(review.grade for review in self.reviews) / \
len(self.reviews)
Re-writing the functions so they can be tested alone:
def averageGrade(alist):
tot = 0.0
for x in alist:
tot += x
return tot/len(alist)
def av_grade(alist):
return sum(alist)/len(alist)
.... alist = range(100)from timeit import Timer
# small amount of items
.... 'from __main__ import alist, averageGrade').repeat(number=100000)Timer('averageGrade(alist)',
[3.9559240341186523, 3.4910569190979004, 3.4856188297271729]
.... 'from __main__ import alist, av_grade').repeat(number=100000)
Timer('av_grade(alist)',
[2.0255107879638672, 1.0968310832977295, 1.0733180046081543]
The version with sum() is much faster. How about with lots of data?
.... 'from __main__ import alist, averageGrade').repeat(number=50)alist = xrange(1000000)
Timer('averageGrade(alist)',
[17.699107885360718, 18.182793140411377, 18.651514053344727]
.... 'from __main__ import alist, av_grade').repeat(number=50)
Timer('av_grade(alist)',
[17.125216007232666, 15.72636890411377, 16.309713840484619]
sum() is still a little faster.
--
Steven
.
- Follow-Ups:
- Re: Which is faster?
- From: Gabriel Genellina
- Re: Which is faster?
- Prev by Date: Re: Ensure only single application instance.
- Next by Date: Re: Which is faster?
- Previous by thread: Re: How to delete a ast character from a string?
- Next by thread: Re: Which is faster?
- Index(es):
Relevant Pages
|