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 - [email protected]
To unsubscribe or change subscription options:
http://mail.python.org/mailman/listinfo/tutor