On Tue, 21 Nov 2006 21:00:02 -0800, John Machin wrote: > Steven D'Aprano wrote: > > [snip] > >> def running_sum(dw): >> """Return a list of the running sums of sequence dw""" >> rs = [0]*len(dw) >> for i in range(len(dw)): >> rs[i] = dw[i] + rs[i-1] > > Please explain to the newbies why there is no exception raised when > rs[i-1] is executed for i == 0, and state whether you consider this is > a Good Idea or a Filthy Trick or a Fortunate Accident.
Because rs[0-1] is just rs[-1], which fetches the LAST item of the list. I cunningly initialised the list to all zeroes, so adding zero to the first term doesn't change the result value. It is a variation of the sentinel technique, where you add an extra value to the beginning or end of a list so that you don't need to treat the first or last item differently. In this specific case, I think it is a combination of Good Idea and Fortunate Accident, but since the meaning of list[-1] is both deliberate and well-documented, it is certainly not a Filthy Trick. -- Steven. -- http://mail.python.org/mailman/listinfo/python-list