Richard D. Moores, 10.11.2010 08:24:
def proper_divisors_sum(n): pd = set((1,)) for x in range(2, int(n**.5)+1): if n % x == 0: pd.update((x, n//x)) return sum(list(pd))
You keep using redundant operations. What "sum(list(s))" does, for s being a set, is:
1) create a list of the length of s 2) iterate over s, copying elements into the list 3) sum up the values in the list What makes you think that the intermediate list is needed? $ python2.6 -m timeit -s 's = set(range(1000))' 'sum(list(s))' 10000 loops, best of 3: 20.7 usec per loop $ python2.6 -m timeit -s 's = set(range(1000))' 'sum(s)' 100000 loops, best of 3: 14.4 usec per loop Stefan _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor