En Sat, 30 Aug 2008 01:26:35 -0300, cnb <[EMAIL PROTECTED]> escribi�:

For a big nbr of it might matter?
Is av_grade O(n*2) and the first O(n)  when it comes to adding or is
"sum x for x in y" just traversing the list ones, accumulating the
values, it doesnt first build the list and then travese it for sum?

AFAIK both versions are O(n).
sum(x for x in y) contains a "generator expression" [1], it does not create an intermediate list. sum([x for x in y]) contains a "list comprehension" [2] and it does create an intermediate list.

I'd say the version using sum() should be faster, because the iteration is implemented inside the interpreter, not in Python code as the other one. But you should actually measure their relative performance; use the timeit module for that.

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)

[1] http://docs.python.org/tut/node11.html#SECTION00111100000000000000000
[2] http://docs.python.org/tut/node7.html
--
Gabriel Genellina

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to