Stefan Behnel wrote: > superpollo, 15.06.2010 14:55: >> Peter Otten ha scritto: >>> superpollo wrote: >>> >>>> goal (from e.c.m.): evaluate >>>> 1^2+2^2+3^2-4^2-5^2+6^2+7^2+8^2-9^2-10^2+...-2010^2, where each three >>>> consecutive + must be followed by two - (^ meaning ** in this context) >>> >>>>>> from itertools import cycle, izip >>>>>> sum(sign*i*i for sign, i in izip(cycle([1]*3+[-1]*2), range(1, >>>>>> 2011))) >>> 536926141 >> >> don't understand it bit i like this a lot! > > Didn't you want to get it "pythonized"? If it's not understandable, it > can't be pythonic.
I'm glad I didn't have to say that mayself ;) OP: You can work it out step by step: First build a list of signs: >>> [1]*3+[-1]*2 [1, 1, 1, -1, -1] Then repeat them infinitely: >>> c = cycle("xy") >>> c.next() 'x' >>> c.next() 'y' >>> c.next() 'x' >>> c.next() 'y' >>> c.next() 'x' Combine with the bases using izip: >>> signs = cycle([1]*3+[-1]*2) >>> [sign*i for sign, i in izip(signs, range(10))] [0, 1, 2, -3, -4, 5, 6, 7, -8, -9] Finally calculate the sum: >>> signs = cycle([1]*3+[-1]*2) >>> sum(sign*i for sign, i in izip(signs, range(10))) -3 Peter -- http://mail.python.org/mailman/listinfo/python-list